From 76770671053b486595a748155c890ca164722bbe Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Mon, 30 Dec 2024 14:15:34 +0000 Subject: [PATCH 01/38] Add migrations --- ...0241118050422_add_bootcamp_data_columns.rb | 5 + ...20241118051006_create_bootcamp_projects.rb | 13 +++ ...0241118051007_create_bootcamp_exercises.rb | 18 +++ ...0241118051047_create_bootcamp_solutions.rb | 17 +++ ...20241118053650_create_bootcamp_concepts.rb | 20 ++++ ...41118055549_create_bootcamp_submissions.rb | 14 +++ ...119025227_create_bootcamp_user_projects.rb | 13 +++ ...20241217061301_create_bootcamp_settings.rb | 8 ++ .../20241217061836_create_bootcamp_levels.rb | 14 +++ ...61847_create_bootcamp_exercise_concepts.rb | 12 ++ db/schema.rb | 106 +++++++++++++++++- 11 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20241118050422_add_bootcamp_data_columns.rb create mode 100644 db/migrate/20241118051006_create_bootcamp_projects.rb create mode 100644 db/migrate/20241118051007_create_bootcamp_exercises.rb create mode 100644 db/migrate/20241118051047_create_bootcamp_solutions.rb create mode 100644 db/migrate/20241118053650_create_bootcamp_concepts.rb create mode 100644 db/migrate/20241118055549_create_bootcamp_submissions.rb create mode 100644 db/migrate/20241119025227_create_bootcamp_user_projects.rb create mode 100644 db/migrate/20241217061301_create_bootcamp_settings.rb create mode 100644 db/migrate/20241217061836_create_bootcamp_levels.rb create mode 100644 db/migrate/20241218061847_create_bootcamp_exercise_concepts.rb diff --git a/db/migrate/20241118050422_add_bootcamp_data_columns.rb b/db/migrate/20241118050422_add_bootcamp_data_columns.rb new file mode 100644 index 0000000000..990af1657e --- /dev/null +++ b/db/migrate/20241118050422_add_bootcamp_data_columns.rb @@ -0,0 +1,5 @@ +class AddBootcampDataColumns < ActiveRecord::Migration[7.0] + def change + add_column :user_bootcamp_data, :level_idx, :integer, null: false, default: 0 + end +end \ No newline at end of file diff --git a/db/migrate/20241118051006_create_bootcamp_projects.rb b/db/migrate/20241118051006_create_bootcamp_projects.rb new file mode 100644 index 0000000000..41df0375ed --- /dev/null +++ b/db/migrate/20241118051006_create_bootcamp_projects.rb @@ -0,0 +1,13 @@ +class CreateBootcampProjects < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_projects do |t| + t.string :slug, null: false + t.string :title, null: false + t.text :description, null: false + t.text :introduction_markdown, null: false + t.text :introduction_html, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20241118051007_create_bootcamp_exercises.rb b/db/migrate/20241118051007_create_bootcamp_exercises.rb new file mode 100644 index 0000000000..749724540d --- /dev/null +++ b/db/migrate/20241118051007_create_bootcamp_exercises.rb @@ -0,0 +1,18 @@ +class CreateBootcampExercises < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_exercises do |t| + t.belongs_to :project + t.string :slug, null: false + + t.integer :idx, null: false + t.string :title, null: false + t.text :description, null: false + t.integer :level_idx, null: false + + t.timestamps + + t.index [:project_id, :slug], unique: true + t.index :level_idx + end + end +end diff --git a/db/migrate/20241118051047_create_bootcamp_solutions.rb b/db/migrate/20241118051047_create_bootcamp_solutions.rb new file mode 100644 index 0000000000..c10b67eeac --- /dev/null +++ b/db/migrate/20241118051047_create_bootcamp_solutions.rb @@ -0,0 +1,17 @@ +class CreateBootcampSolutions < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_solutions do |t| + t.belongs_to :user + t.belongs_to :exercise + + t.string :uuid, null: false + + t.text :code, null: false + + t.datetime :completed_at, null: true + t.timestamps + + t.index [:user_id, :exercise_id], unique: true + end + end +end diff --git a/db/migrate/20241118053650_create_bootcamp_concepts.rb b/db/migrate/20241118053650_create_bootcamp_concepts.rb new file mode 100644 index 0000000000..65f3dc852b --- /dev/null +++ b/db/migrate/20241118053650_create_bootcamp_concepts.rb @@ -0,0 +1,20 @@ +class CreateBootcampConcepts < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_concepts do |t| + t.string :slug, null: false + + t.bigint :parent_id, null: true + t.integer :level_idx, null: false + t.boolean :apex, null: false, default: false + + t.string :title, null: false + t.text :description, null: false + t.text :content_markdown, null: false + t.text :content_html, null: false + + t.timestamps + + t.foreign_key :bootcamp_concepts, column: :parent_id + end + end +end diff --git a/db/migrate/20241118055549_create_bootcamp_submissions.rb b/db/migrate/20241118055549_create_bootcamp_submissions.rb new file mode 100644 index 0000000000..2916d82cde --- /dev/null +++ b/db/migrate/20241118055549_create_bootcamp_submissions.rb @@ -0,0 +1,14 @@ +class CreateBootcampSubmissions < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_submissions do |t| + t.string :uuid, null: false + t.belongs_to :solution, foreign_key: { to_table: "bootcamp_solutions" }, null: true + t.column :status, :smallint, null: false + t.text :code, null: false + t.text :readonly_ranges, null: false + t.text :test_results, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20241119025227_create_bootcamp_user_projects.rb b/db/migrate/20241119025227_create_bootcamp_user_projects.rb new file mode 100644 index 0000000000..d3bcef1d0d --- /dev/null +++ b/db/migrate/20241119025227_create_bootcamp_user_projects.rb @@ -0,0 +1,13 @@ +class CreateBootcampUserProjects < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_user_projects do |t| + t.belongs_to :user + t.belongs_to :project + t.integer :status, default: 0, null: false + + t.timestamps + + t.index [:user_id, :project_id], unique: true + end + end +end diff --git a/db/migrate/20241217061301_create_bootcamp_settings.rb b/db/migrate/20241217061301_create_bootcamp_settings.rb new file mode 100644 index 0000000000..6ae80d5c8b --- /dev/null +++ b/db/migrate/20241217061301_create_bootcamp_settings.rb @@ -0,0 +1,8 @@ +class CreateBootcampSettings < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_settings do |t| + t.timestamps + t.integer :level_idx, null: false, default: 1 + end + end +end diff --git a/db/migrate/20241217061836_create_bootcamp_levels.rb b/db/migrate/20241217061836_create_bootcamp_levels.rb new file mode 100644 index 0000000000..6a88ccc4cf --- /dev/null +++ b/db/migrate/20241217061836_create_bootcamp_levels.rb @@ -0,0 +1,14 @@ +class CreateBootcampLevels < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_levels do |t| + t.integer :idx, null: false + + t.string :title, null: false + t.text :description, null: false + t.text :content_markdown, null: false + t.text :content_html, null: false + + t.timestamps + end + end +end diff --git a/db/migrate/20241218061847_create_bootcamp_exercise_concepts.rb b/db/migrate/20241218061847_create_bootcamp_exercise_concepts.rb new file mode 100644 index 0000000000..1c128bcb22 --- /dev/null +++ b/db/migrate/20241218061847_create_bootcamp_exercise_concepts.rb @@ -0,0 +1,12 @@ +class CreateBootcampExerciseConcepts < ActiveRecord::Migration[7.0] + def change + create_table :bootcamp_exercise_concepts do |t| + t.references :exercise, null: false, foreign_key: {to_table: :bootcamp_exercises} + t.references :concept, null: false, foreign_key: {to_table: :bootcamp_concepts} + + t.timestamps + + t.index [:exercise_id, :concept_id], unique: true + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 195a96fd59..7ea6429ade 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_12_16_055937) do +ActiveRecord::Schema[7.0].define(version: 2024_12_18_061847) do create_table "active_storage_attachments", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| t.string "name", null: false t.string "record_type", null: false @@ -70,6 +70,106 @@ t.index ["slug"], name: "index_blog_posts_on_slug", unique: true end + create_table "bootcamp_concepts", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.string "slug", null: false + t.bigint "parent_id" + t.integer "level_idx", null: false + t.boolean "apex", default: false, null: false + t.string "title", null: false + t.text "description", null: false + t.text "content_markdown", null: false + t.text "content_html", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["parent_id"], name: "fk_rails_a7c513f5e1" + end + + create_table "bootcamp_exercise_concepts", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.bigint "exercise_id", null: false + t.bigint "concept_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["concept_id"], name: "index_bootcamp_exercise_concepts_on_concept_id" + t.index ["exercise_id", "concept_id"], name: "index_bootcamp_exercise_concepts_on_exercise_id_and_concept_id", unique: true + t.index ["exercise_id"], name: "index_bootcamp_exercise_concepts_on_exercise_id" + end + + create_table "bootcamp_exercises", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.bigint "project_id" + t.string "slug", null: false + t.integer "idx", null: false + t.string "title", null: false + t.text "description", null: false + t.integer "level_idx", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["level_idx"], name: "index_bootcamp_exercises_on_level_idx" + t.index ["project_id", "slug"], name: "index_bootcamp_exercises_on_project_id_and_slug", unique: true + t.index ["project_id"], name: "index_bootcamp_exercises_on_project_id" + end + + create_table "bootcamp_levels", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.integer "idx", null: false + t.string "title", null: false + t.text "description", null: false + t.text "content_markdown", null: false + t.text "content_html", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "bootcamp_projects", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.string "slug", null: false + t.string "title", null: false + t.text "description", null: false + t.text "introduction_markdown", null: false + t.text "introduction_html", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + end + + create_table "bootcamp_settings", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "level_idx", default: 1, null: false + end + + create_table "bootcamp_solutions", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.bigint "user_id" + t.bigint "exercise_id" + t.string "uuid", null: false + t.text "code", null: false + t.datetime "completed_at" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["exercise_id"], name: "index_bootcamp_solutions_on_exercise_id" + t.index ["user_id", "exercise_id"], name: "index_bootcamp_solutions_on_user_id_and_exercise_id", unique: true + t.index ["user_id"], name: "index_bootcamp_solutions_on_user_id" + end + + create_table "bootcamp_submissions", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.string "uuid", null: false + t.bigint "solution_id" + t.integer "status", limit: 2, null: false + t.text "code", null: false + t.text "readonly_ranges", null: false + t.text "test_results", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["solution_id"], name: "index_bootcamp_submissions_on_solution_id" + end + + create_table "bootcamp_user_projects", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| + t.bigint "user_id" + t.bigint "project_id" + t.integer "status", default: 0, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["project_id"], name: "index_bootcamp_user_projects_on_project_id" + t.index ["user_id", "project_id"], name: "index_bootcamp_user_projects_on_user_id_and_project_id", unique: true + t.index ["user_id"], name: "index_bootcamp_user_projects_on_user_id" + end + create_table "cohort_memberships", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| t.bigint "user_id", null: false t.text "introduction", null: false @@ -1655,6 +1755,10 @@ add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" add_foreign_key "blog_posts", "users", column: "author_id" + add_foreign_key "bootcamp_concepts", "bootcamp_concepts", column: "parent_id" + add_foreign_key "bootcamp_exercise_concepts", "bootcamp_concepts", column: "concept_id" + add_foreign_key "bootcamp_exercise_concepts", "bootcamp_exercises", column: "exercise_id" + add_foreign_key "bootcamp_submissions", "bootcamp_solutions", column: "solution_id" add_foreign_key "cohort_memberships", "cohorts" add_foreign_key "cohort_memberships", "users" add_foreign_key "cohorts", "tracks" From 9301572576582afd16b69ecc6ea5bb911bd522d5 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Mon, 30 Dec 2024 14:19:46 +0000 Subject: [PATCH 02/38] Add new models and factories --- .../document/sync_all_to_search_index.rb | 1 + app/commands/document/sync_to_search_index.rb | 1 + .../representation/sync_to_search_index.rb | 1 + .../solution/sync_all_to_search_index.rb | 1 + app/commands/solution/sync_to_search_index.rb | 1 + app/models/bootcamp/concept.rb | 22 +++++++ app/models/bootcamp/exercise.rb | 55 +++++++++++++++++ app/models/bootcamp/exercise_concept.rb | 6 ++ app/models/bootcamp/level.rb | 14 +++++ app/models/bootcamp/project.rb | 12 ++++ app/models/bootcamp/settings.rb | 10 +++ app/models/bootcamp/solution.rb | 21 +++++++ app/models/bootcamp/submission.rb | 28 +++++++++ app/models/bootcamp/user_project.rb | 61 +++++++++++++++++++ app/models/user.rb | 4 ++ config/initializers/json.rb | 14 +++++ test/factories/bootcamp/concepts.rb | 9 +++ test/factories/bootcamp/exercise_concepts.rb | 6 ++ test/factories/bootcamp/exercises.rb | 10 +++ test/factories/bootcamp/levels.rb | 8 +++ test/factories/bootcamp/projects.rb | 8 +++ test/factories/bootcamp/settings.rb | 4 ++ test/factories/bootcamp/solutions.rb | 11 ++++ test/factories/bootcamp/submissions.rb | 15 +++++ test/factories/bootcamp/user_projects.rb | 6 ++ test/test_helper.rb | 26 +++++--- 26 files changed, 346 insertions(+), 9 deletions(-) create mode 100644 app/models/bootcamp/concept.rb create mode 100644 app/models/bootcamp/exercise.rb create mode 100644 app/models/bootcamp/exercise_concept.rb create mode 100644 app/models/bootcamp/level.rb create mode 100644 app/models/bootcamp/project.rb create mode 100644 app/models/bootcamp/settings.rb create mode 100644 app/models/bootcamp/solution.rb create mode 100644 app/models/bootcamp/submission.rb create mode 100644 app/models/bootcamp/user_project.rb create mode 100644 test/factories/bootcamp/concepts.rb create mode 100644 test/factories/bootcamp/exercise_concepts.rb create mode 100644 test/factories/bootcamp/exercises.rb create mode 100644 test/factories/bootcamp/levels.rb create mode 100644 test/factories/bootcamp/projects.rb create mode 100644 test/factories/bootcamp/settings.rb create mode 100644 test/factories/bootcamp/solutions.rb create mode 100644 test/factories/bootcamp/submissions.rb create mode 100644 test/factories/bootcamp/user_projects.rb diff --git a/app/commands/document/sync_all_to_search_index.rb b/app/commands/document/sync_all_to_search_index.rb index c39584f04c..0c6bd84bda 100644 --- a/app/commands/document/sync_all_to_search_index.rb +++ b/app/commands/document/sync_all_to_search_index.rb @@ -19,6 +19,7 @@ def call end Exercism.opensearch_client.bulk(body:) + Exercism::TOUCHED_OPENSEARCH_INDEXES << Document::OPENSEARCH_INDEX if Rails.env.test? end end diff --git a/app/commands/document/sync_to_search_index.rb b/app/commands/document/sync_to_search_index.rb index 5c50434a76..737e54671b 100644 --- a/app/commands/document/sync_to_search_index.rb +++ b/app/commands/document/sync_to_search_index.rb @@ -11,5 +11,6 @@ def call id: doc.id, body: Document::CreateSearchIndexDocument.(doc) ) + Exercism::TOUCHED_OPENSEARCH_INDEXES << Document::OPENSEARCH_INDEX if Rails.env.test? end end diff --git a/app/commands/exercise/representation/sync_to_search_index.rb b/app/commands/exercise/representation/sync_to_search_index.rb index f3cbc371db..61953a43ef 100644 --- a/app/commands/exercise/representation/sync_to_search_index.rb +++ b/app/commands/exercise/representation/sync_to_search_index.rb @@ -27,6 +27,7 @@ def create_document! id: representation.id, body: Exercise::Representation::CreateSearchIndexDocument.(representation) ) + Exercism::TOUCHED_OPENSEARCH_INDEXES << Exercise::Representation::OPENSEARCH_INDEX if Rails.env.test? end def delete_document! diff --git a/app/commands/solution/sync_all_to_search_index.rb b/app/commands/solution/sync_all_to_search_index.rb index 8568cb8766..5419ede72d 100644 --- a/app/commands/solution/sync_all_to_search_index.rb +++ b/app/commands/solution/sync_all_to_search_index.rb @@ -25,6 +25,7 @@ def call end Exercism.opensearch_client.bulk(body:) + Exercism::TOUCHED_OPENSEARCH_INDEXES << Solution::OPENSEARCH_INDEX if Rails.env.test? end end diff --git a/app/commands/solution/sync_to_search_index.rb b/app/commands/solution/sync_to_search_index.rb index aa4ae8ff1f..76c7ce2306 100644 --- a/app/commands/solution/sync_to_search_index.rb +++ b/app/commands/solution/sync_to_search_index.rb @@ -20,6 +20,7 @@ def create_document! id: solution.id, body: Solution::CreateSearchIndexDocument.(solution) ) + Exercism::TOUCHED_OPENSEARCH_INDEXES << Solution::OPENSEARCH_INDEX if Rails.env.test? end def delete_document! diff --git a/app/models/bootcamp/concept.rb b/app/models/bootcamp/concept.rb new file mode 100644 index 0000000000..19710f5222 --- /dev/null +++ b/app/models/bootcamp/concept.rb @@ -0,0 +1,22 @@ +class Bootcamp::Concept < ApplicationRecord + self.table_name = "bootcamp_concepts" + + has_markdown_field :content + + belongs_to :parent, optional: true, class_name: "Bootcamp::Concept" + has_many :descendants, class_name: "Bootcamp::Concept", foreign_key: :parent_id, dependent: :nullify, inverse_of: :parent + + belongs_to :level, foreign_key: :level_idx, primary_key: :idx, inverse_of: :exercises, class_name: "Bootcamp::Level" + + has_many :exercise_concepts, dependent: :destroy, class_name: "Bootcamp::ExerciseConcept" + has_many :exercises, through: :exercise_concepts, class_name: "Bootcamp::Exercise" + + scope :apex, -> { where(apex: true) } + scope :non_apex, -> { where(apex: false) } + + def to_param = slug + + def parents + parent ? parent.parents + [parent] : [] + end +end diff --git a/app/models/bootcamp/exercise.rb b/app/models/bootcamp/exercise.rb new file mode 100644 index 0000000000..8b9cd8154c --- /dev/null +++ b/app/models/bootcamp/exercise.rb @@ -0,0 +1,55 @@ +class Bootcamp::Exercise < ApplicationRecord + extend Mandate::Memoize + + self.table_name = "bootcamp_exercises" + + belongs_to :project, class_name: "Bootcamp::Project" + belongs_to :level, foreign_key: :level_idx, primary_key: :idx, inverse_of: :exercises, class_name: "Bootcamp::Level" + has_many :solutions, dependent: :destroy, class_name: "Bootcamp::Solution" + has_many :submissions, through: :solutions + has_many :exercise_concepts, dependent: :destroy, class_name: "Bootcamp::ExerciseConcept" + has_many :concepts, through: :exercise_concepts + + default_scope -> { order(:idx) } + scope :unlocked, -> { where('level_idx < ?', Settings.level_idx) } + + def to_param = slug + def locked? = level_idx > Settings.level_idx + def unlocked? = !locked? + def concepts = super.to_a.sort + + def icon_url = "/exercise-icons/#{project.slug}/#{slug}.svg" + + memoize + def tasks + config[:tasks].map.with_index do |task, idx| + task[:instructions_html] = Markdown::Parse.(file_contents("task-#{idx + 1}.md")) + task + end + end + + def num_tasks = tasks.size + + memoize + def config + JSON.parse(file_contents('config.json'), symbolize_names: true) + end + + memoize + def introduction_html + Markdown::Parse.(file_contents("introduction.md")) + end + + def stub + file_contents("stub.jk") + end + + def readonly_ranges + config[:readonly_ranges] + end + + private + def file_contents(filename) + File.read(Rails.root / "content/projects/#{project.slug}/exercises/#{slug}/#{filename}") + end +end diff --git a/app/models/bootcamp/exercise_concept.rb b/app/models/bootcamp/exercise_concept.rb new file mode 100644 index 0000000000..3d9481a863 --- /dev/null +++ b/app/models/bootcamp/exercise_concept.rb @@ -0,0 +1,6 @@ +class Bootcamp::ExerciseConcept < ApplicationRecord + self.table_name = "bootcamp_exercise_concepts" + + belongs_to :exercise, class_name: "Bootcamp::Exercise" + belongs_to :concept, class_name: "Bootcamp::Concept" +end diff --git a/app/models/bootcamp/level.rb b/app/models/bootcamp/level.rb new file mode 100644 index 0000000000..080c99afb9 --- /dev/null +++ b/app/models/bootcamp/level.rb @@ -0,0 +1,14 @@ +class Bootcamp::Level < ApplicationRecord + self.table_name = "bootcamp_levels" + + has_markdown_field :content + + has_many :concepts, dependent: :destroy, foreign_key: :level_idx, primary_key: :idx, inverse_of: :level, + class_name: "Bootcamp::Concept" + has_many :exercises, dependent: :destroy, foreign_key: :level_idx, primary_key: :idx, inverse_of: :level, + class_name: "Bootcamp::Exercise" + + def unlocked? + Settings.instance.level_idx >= idx + end +end diff --git a/app/models/bootcamp/project.rb b/app/models/bootcamp/project.rb new file mode 100644 index 0000000000..36615b2ddd --- /dev/null +++ b/app/models/bootcamp/project.rb @@ -0,0 +1,12 @@ +class Bootcamp::Project < ApplicationRecord + self.table_name = "bootcamp_projects" + + has_markdown_field :introduction + + # TODO: Fix the rubocop error + has_many :exercises, class_name: "Bootcamp::Exercise" # rubocop:disable Rails/HasManyOrHasOneDependent + + def to_param = slug + + def icon_url = "/project-icons/#{slug}.svg" +end diff --git a/app/models/bootcamp/settings.rb b/app/models/bootcamp/settings.rb new file mode 100644 index 0000000000..1a67272f1c --- /dev/null +++ b/app/models/bootcamp/settings.rb @@ -0,0 +1,10 @@ +class Bootcamp::Settings < ApplicationRecord + self.table_name = "bootcamp_settings" + + def self.instance + @instance = Settings.first || Settings.create! + end + + # DO NOT memoize these. + def self.level_idx = instance.level_idx +end diff --git a/app/models/bootcamp/solution.rb b/app/models/bootcamp/solution.rb new file mode 100644 index 0000000000..ce2bae81e7 --- /dev/null +++ b/app/models/bootcamp/solution.rb @@ -0,0 +1,21 @@ +class Bootcamp::Solution < ApplicationRecord + self.table_name = "bootcamp_solutions" + + belongs_to :user + belongs_to :exercise, class_name: "Bootcamp::Exercise" + has_one :project, through: :exercise + has_many :submissions, dependent: :destroy, class_name: "Bootcamp::Submission" + + scope :completed, -> { where.not(completed_at: nil) } + scope :in_progress, -> { where(completed_at: nil) } + + before_create do + self.uuid = SecureRandom.uuid + end + + def to_param = uuid + + def completed? = !!completed_at + def in_progress? = !completed? + def status = completed? ? :completed : :in_progress +end diff --git a/app/models/bootcamp/submission.rb b/app/models/bootcamp/submission.rb new file mode 100644 index 0000000000..ace4e0dd94 --- /dev/null +++ b/app/models/bootcamp/submission.rb @@ -0,0 +1,28 @@ +class Bootcamp::Submission < ApplicationRecord + self.table_name = "bootcamp_submissions" + + serialize :test_results, coder: JSONWithIndifferentAccess + serialize :readonly_ranges, coder: JSONWithIndifferentAccess + enum :status, { pass: 0, fail: 1 } + + scope :passed, -> { where(status: :pass) } + scope :failed, -> { where(status: :fail) } + + belongs_to :solution, class_name: "Bootcamp::Solution" + + before_create do + self.uuid = SecureRandom.uuid + self.status = test_results[:status] + end + + def status = super.to_sym + def passed? = status == :pass + def test_suite = test_results[:suite].to_sym + + def passed_test?(slug) + test = test_results[:tests].find { |tr| tr[:slug] == slug.to_s } + return false unless test + + test[:status].to_s == "pass" + end +end diff --git a/app/models/bootcamp/user_project.rb b/app/models/bootcamp/user_project.rb new file mode 100644 index 0000000000..c4d1ecc0be --- /dev/null +++ b/app/models/bootcamp/user_project.rb @@ -0,0 +1,61 @@ +class Bootcamp::UserProject < ApplicationRecord + extend Mandate::Memoize + + self.table_name = "bootcamp_user_projects" + + belongs_to :user + belongs_to :project, class_name: "Bootcamp::Project" + + enum :status, { locked: 0, available: 1, completed: 2 } + + def status = super.to_sym + def locked? = status == :locked + def available? = status == :available + def completed? = status == :completed + + def self.for!(user, project) + find_by!(user:, project:) + end + + # memoize + def solutions + Solution.where(user:, exercise: project.exercises). + includes(:exercise). + to_a + end + + def unlocked_exercises + project.exercises.reject(&:locked?) + end + + def next_exercise + completed_exercise_ids = solutions.select(&:completed?).map(&:exercise_id) + project.exercises.reject(&:locked?).reject { |e| completed_exercise_ids.include?(e.id) }.first + end + + def exercise_available?(exercise) + # If the project's locked, all the exercises are locked + return false if locked? + + # If the exercise is gloabally locked, it's locked + return false if exercise.locked? + + # The first exercise is always available + return true if exercise.idx == 1 + + # Otherwise the previous solution must be completed + solutions.find { |s| s.exercise.idx == exercise.idx - 1 }&.completed? + end + + def exercise_status(exercise, solution) + solution ||= solutions.find { |s| s.exercise_id == exercise.id } + + if solution + solution.status + elsif exercise_available?(exercise) + :available + else + :locked + end + end +end diff --git a/app/models/user.rb b/app/models/user.rb index cd86d58eba..590f79f70b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -129,6 +129,10 @@ class User < ApplicationRecord has_many :challenges, dependent: :destroy has_many :watched_videos, class_name: "User::WatchedVideo", dependent: :destroy + has_many :bootcamp_solutions, dependent: :destroy, class_name: "Bootcamp::Solution" + has_many :bootcamp_user_projects, dependent: :destroy, class_name: "Bootcamp::UserProject" + has_many :bootcamp_projects, through: :user_projects + scope :random, -> { order('RAND()') } scope :with_data, -> { joins(:data) } diff --git a/config/initializers/json.rb b/config/initializers/json.rb index 660599d6d9..a26d0d3676 100644 --- a/config/initializers/json.rb +++ b/config/initializers/json.rb @@ -3,3 +3,17 @@ require 'oj' Oj.optimize_rails + +# rubocop:disable Security/JSONLoad +class JSONWithIndifferentAccess + def self.load(str) + JSON.load(str, nil, symbolize_names: true, create_additions: false) + # obj.freeze + # obj + end + + def self.dump(obj) + JSON.dump(obj) + end +end +# rubocop:enable Security/JSONLoad diff --git a/test/factories/bootcamp/concepts.rb b/test/factories/bootcamp/concepts.rb new file mode 100644 index 0000000000..84074dacbc --- /dev/null +++ b/test/factories/bootcamp/concepts.rb @@ -0,0 +1,9 @@ +FactoryBot.define do + factory :bootcamp_concept, class: "Bootcamp::Concept" do + level { Bootcamp::Level.first || create(:bootcamp_level) } + slug { "Some Concept" } + title { "Some Concept" } + description { "Some Concept" } + content_markdown { "Some Concept" } + end +end diff --git a/test/factories/bootcamp/exercise_concepts.rb b/test/factories/bootcamp/exercise_concepts.rb new file mode 100644 index 0000000000..afcf3463ff --- /dev/null +++ b/test/factories/bootcamp/exercise_concepts.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :bootcamp_exercise_concept, class: "Bootcamp::ExerciseConcept" do + exercise { create(:bootcamp_exercise) } + concept { create(:bootcamp_concept) } + end +end diff --git a/test/factories/bootcamp/exercises.rb b/test/factories/bootcamp/exercises.rb new file mode 100644 index 0000000000..5dfb3da732 --- /dev/null +++ b/test/factories/bootcamp/exercises.rb @@ -0,0 +1,10 @@ +FactoryBot.define do + factory :bootcamp_exercise, class: "Bootcamp::Exercise" do + project { create(:bootcamp_project) } + slug { SecureRandom.hex } + idx { project.exercises.count + 1 } + title { "Exercise Title" } + description { "Exercise Description" } + level_idx { (Bootcamp::Level.first || create(:bootcamp_level)).idx } + end +end diff --git a/test/factories/bootcamp/levels.rb b/test/factories/bootcamp/levels.rb new file mode 100644 index 0000000000..3f8aa4dbe3 --- /dev/null +++ b/test/factories/bootcamp/levels.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :bootcamp_level, class: "Bootcamp::Level" do + idx { Bootcamp::Level.count + 1 } + title { "Level Title" } + description { "Level Description" } + content_markdown { "Level Content Markdown" } + end +end diff --git a/test/factories/bootcamp/projects.rb b/test/factories/bootcamp/projects.rb new file mode 100644 index 0000000000..1171a9d2c6 --- /dev/null +++ b/test/factories/bootcamp/projects.rb @@ -0,0 +1,8 @@ +FactoryBot.define do + factory :bootcamp_project, class: "Bootcamp::Project" do + slug { "slug-#{SecureRandom.hex}" } + title { "Project Title" } + description { "Project Description" } + introduction_markdown { "Project Introduction" } + end +end diff --git a/test/factories/bootcamp/settings.rb b/test/factories/bootcamp/settings.rb new file mode 100644 index 0000000000..52adb0712c --- /dev/null +++ b/test/factories/bootcamp/settings.rb @@ -0,0 +1,4 @@ +FactoryBot.define do + factory :bootcamp_settings, class: "Bootcamp::Settings" do + end +end diff --git a/test/factories/bootcamp/solutions.rb b/test/factories/bootcamp/solutions.rb new file mode 100644 index 0000000000..794196b696 --- /dev/null +++ b/test/factories/bootcamp/solutions.rb @@ -0,0 +1,11 @@ +FactoryBot.define do + factory :bootcamp_solution, class: "Bootcamp::Solution" do + user + exercise { create(:bootcamp_exercise) } + code { "Some random code" } + + trait :completed do + completed_at { Time.current } + end + end +end diff --git a/test/factories/bootcamp/submissions.rb b/test/factories/bootcamp/submissions.rb new file mode 100644 index 0000000000..39ca29de42 --- /dev/null +++ b/test/factories/bootcamp/submissions.rb @@ -0,0 +1,15 @@ +FactoryBot.define do + factory :bootcamp_submission, class: "Bootcamp::Submission" do + solution { create(:bootcamp_solution) } + code { "Some code" } + test_results do + { + status: :pass, + tests: [] + } + end + readonly_ranges do + [] + end + end +end diff --git a/test/factories/bootcamp/user_projects.rb b/test/factories/bootcamp/user_projects.rb new file mode 100644 index 0000000000..276251c2e0 --- /dev/null +++ b/test/factories/bootcamp/user_projects.rb @@ -0,0 +1,6 @@ +FactoryBot.define do + factory :bootcamp_user_project, class: "Bootcamp::UserProject" do + user + project { create(:bootcamp_project) } + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index 1b79a78676..b3b849f7a1 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -128,6 +128,18 @@ def ==(other) ) end +# Setup our indexes once (we'll keep them clear in teardowns) +opensearch = Exercism.opensearch_client +[ + Document::OPENSEARCH_INDEX, + Solution::OPENSEARCH_INDEX, + Exercise::Representation::OPENSEARCH_INDEX +].map do |index| + opensearch.indices.delete(index:) if opensearch.indices.exists(index:) + opensearch.indices.create(index:) +end +Exercism::TOUCHED_OPENSEARCH_INDEXES = [].freeze + class ActionMailer::TestCase def assert_email(email, to, subject, fixture, bulk: false) # rubocop:disable Lint/UnusedMethodArgument # Test email can send ok @@ -156,7 +168,7 @@ class ActiveSupport::TestCase # parallelize(workers: :number_of_processors) setup do - reset_opensearch! + Exercism::TOUCHED_OPENSEARCH_INDEXES.clear reset_redis! reset_rack_attack! @@ -170,6 +182,8 @@ class ActiveSupport::TestCase end teardown do + reset_opensearch! + Bullet.perform_out_of_channel_notifications if Bullet.notification? Bullet.end_request end @@ -295,7 +309,8 @@ def download_s3_file(bucket, key) ###################### def reset_opensearch! opensearch = Exercism.opensearch_client - OPENSEARCH_INDEXES.each do |index| + + Exercism::TOUCHED_OPENSEARCH_INDEXES.map do |index| opensearch.indices.delete(index:) if opensearch.indices.exists(index:) opensearch.indices.create(index:) end @@ -390,13 +405,6 @@ def reset_user_cache(user) user.data.reload.update!(cache: nil) user.reload end - - OPENSEARCH_INDEXES = [ - Document::OPENSEARCH_INDEX, - Solution::OPENSEARCH_INDEX, - Exercise::Representation::OPENSEARCH_INDEX - ].freeze - private_constant :OPENSEARCH_INDEXES end class ActionView::TestCase From 00390827584da105a1ee36cdf9c6d85936454d8b Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Mon, 30 Dec 2024 14:40:18 +0000 Subject: [PATCH 03/38] Add commands --- app/commands/bootcamp/select_next_exercise.rb | 28 ++++++ app/commands/bootcamp/solution/complete.rb | 23 +++++ app/commands/bootcamp/solution/create.rb | 43 +++++++++ app/commands/bootcamp/submission/create.rb | 27 ++++++ app/commands/bootcamp/update_user_level.rb | 30 ++++++ app/commands/bootcamp/user_project/create.rb | 19 ++++ .../bootcamp/user_project/create_all.rb | 11 +++ .../bootcamp/user_project/update_status.rb | 29 ++++++ app/models/bootcamp/exercise.rb | 4 +- app/models/bootcamp/settings.rb | 2 +- app/models/bootcamp/user_project.rb | 2 +- app/models/user.rb | 2 +- db/schema.rb | 1 + .../bootcamp/select_next_exercise_test.rb | 93 +++++++++++++++++++ .../bootcamp/solution/complete_test.rb | 31 +++++++ .../commands/bootcamp/solution/create_test.rb | 67 +++++++++++++ .../bootcamp/submission/create_test.rb | 47 ++++++++++ test/commands/bootcamp/update_level_test.rb | 73 +++++++++++++++ .../user_project/update_status_test.rb | 44 +++++++++ test/factories/bootcamp/user_projects.rb | 2 +- test/factories/users.rb | 6 ++ test/test_helper.rb | 2 +- 22 files changed, 579 insertions(+), 7 deletions(-) create mode 100644 app/commands/bootcamp/select_next_exercise.rb create mode 100644 app/commands/bootcamp/solution/complete.rb create mode 100644 app/commands/bootcamp/solution/create.rb create mode 100644 app/commands/bootcamp/submission/create.rb create mode 100644 app/commands/bootcamp/update_user_level.rb create mode 100644 app/commands/bootcamp/user_project/create.rb create mode 100644 app/commands/bootcamp/user_project/create_all.rb create mode 100644 app/commands/bootcamp/user_project/update_status.rb create mode 100644 test/commands/bootcamp/select_next_exercise_test.rb create mode 100644 test/commands/bootcamp/solution/complete_test.rb create mode 100644 test/commands/bootcamp/solution/create_test.rb create mode 100644 test/commands/bootcamp/submission/create_test.rb create mode 100644 test/commands/bootcamp/update_level_test.rb create mode 100644 test/commands/bootcamp/user_project/update_status_test.rb diff --git a/app/commands/bootcamp/select_next_exercise.rb b/app/commands/bootcamp/select_next_exercise.rb new file mode 100644 index 0000000000..47bab5d052 --- /dev/null +++ b/app/commands/bootcamp/select_next_exercise.rb @@ -0,0 +1,28 @@ +class Bootcamp::SelectNextExercise + include Mandate + + initialize_with :user, project: nil + + def call + return next_user_project_exercise if next_user_project_exercise + + Bootcamp::Exercise.unlocked.where.not(project: user.bootcamp_projects). + where.not(id: completed_exercise_ids).first + end + + def user_project + if project + user_project = Bootcamp::UserProject.for!(user, project) + return user_project if user_project.available? + end + + user.bootcamp_user_projects.where(status: :available).first + end + + memoize + def next_user_project_exercise = user_project&.next_exercise + + def completed_exercise_ids + user.bootcamp_solutions.where.not(completed_at: nil).select(:exercise_id) + end +end diff --git a/app/commands/bootcamp/solution/complete.rb b/app/commands/bootcamp/solution/complete.rb new file mode 100644 index 0000000000..7560ab12c3 --- /dev/null +++ b/app/commands/bootcamp/solution/complete.rb @@ -0,0 +1,23 @@ +class Bootcamp::Solution::Complete + include Mandate + + initialize_with :solution + + def call + # It's essential that both of these lines are called + # inline to ensure next exercise selection is correct + solution.update!(completed_at: Time.current) + Bootcamp::UserProject::UpdateStatus.(user_project) + + schedule_deferred_jobs! + end + + private + def schedule_deferred_jobs! + Bootcamp::UpdateUserLevel.defer(user) + end + + def user_project = Bootcamp::UserProject.for!(user, project) + + delegate :user, :project, to: :solution +end diff --git a/app/commands/bootcamp/solution/create.rb b/app/commands/bootcamp/solution/create.rb new file mode 100644 index 0000000000..4ea58b756a --- /dev/null +++ b/app/commands/bootcamp/solution/create.rb @@ -0,0 +1,43 @@ +class Bootcamp::Solution::Create + include Mandate + + initialize_with :user, :exercise + + def call + guard! + + begin + Bootcamp::Solution.create!( + user:, + exercise:, + code: + ) + rescue ActiveRecord::RecordNotUnique + Bootcamp::Solution.find_by!( + user:, + exercise: + ) + end + end + + private + def guard! + raise ExerciseLockedError unless user_project.exercise_available?(exercise) + end + + def code + exercise.stub.gsub(Regexp.new("{{EXERCISE_([-a-z0-9]+)}}")) do + previous_solutions[::Regexp.last_match(1)].code + end + end + + # This is used for the code interpolation, only if actually required. + memoize + def previous_solutions + user_project.solutions.index_by { |s| s.exercise.slug } + end + + def user_project + Bootcamp::UserProject.find_by!(user:, project: exercise.project) + end +end diff --git a/app/commands/bootcamp/submission/create.rb b/app/commands/bootcamp/submission/create.rb new file mode 100644 index 0000000000..57baadd030 --- /dev/null +++ b/app/commands/bootcamp/submission/create.rb @@ -0,0 +1,27 @@ +class Bootcamp::Submission::Create + include Mandate + + initialize_with :solution, :code, :test_results, :readonly_ranges + + def call + create_submission.tap do |submission| + fire_events!(submission) + end + end + + private + def create_submission + Bootcamp::Submission.create!( + solution:, + code:, + test_results:, + readonly_ranges: readonly_ranges || [] + ) + end + + def fire_events!(_submission) + nil # TODO: Implement this + # if submission.passed? + # end + end +end diff --git a/app/commands/bootcamp/update_user_level.rb b/app/commands/bootcamp/update_user_level.rb new file mode 100644 index 0000000000..c4061e849b --- /dev/null +++ b/app/commands/bootcamp/update_user_level.rb @@ -0,0 +1,30 @@ +class Bootcamp::UpdateUserLevel + include Mandate + + initialize_with :user + + def call + max = 0 + exercise_ids_by_level_idx.each do |level_idx, exercise_ids| + next if level_idx < max + break unless solved_exercise_ids_by_level_idx[level_idx] == exercise_ids + + max = level_idx + end + user.bootcamp_data.update!(level_idx: max) + end + + memoize + def exercise_ids_by_level_idx + Bootcamp::Exercise.pluck(:level_idx, :id). + group_by(&:first). + transform_values { |v| v.map(&:last) }. + sort.to_h + end + + def solved_exercise_ids_by_level_idx + user.bootcamp_solutions.completed.joins(:exercise).pluck(:level_idx, :exercise_id). + group_by(&:first). + transform_values { |v| v.map(&:last) } + end +end diff --git a/app/commands/bootcamp/user_project/create.rb b/app/commands/bootcamp/user_project/create.rb new file mode 100644 index 0000000000..2de96ba543 --- /dev/null +++ b/app/commands/bootcamp/user_project/create.rb @@ -0,0 +1,19 @@ +class Bootcamp::UserProject::Create + include Mandate + + initialize_with :user, :project + + def call + Bootcamp::Project.find_each do |_project| + find_or_create.tap do |up| + Bootcamp::UserProject::UpdateStatus.(up) + end + end + end + + def find_or_create + Bootcamp::UserProject.create!(user:, project:) + rescue StandardError + Bootcamp::UserProject.find_by!(user:, project:) + end +end diff --git a/app/commands/bootcamp/user_project/create_all.rb b/app/commands/bootcamp/user_project/create_all.rb new file mode 100644 index 0000000000..1d5408235e --- /dev/null +++ b/app/commands/bootcamp/user_project/create_all.rb @@ -0,0 +1,11 @@ +class Bootcamp::UserProject::CreateAll + include Mandate + + initialize_with :user + + def call + Bootcamp::Project.find_each do |project| + Bootcamp::UserProject::Create.defer(user, project) + end + end +end diff --git a/app/commands/bootcamp/user_project/update_status.rb b/app/commands/bootcamp/user_project/update_status.rb new file mode 100644 index 0000000000..0d9442a643 --- /dev/null +++ b/app/commands/bootcamp/user_project/update_status.rb @@ -0,0 +1,29 @@ +class Bootcamp::UserProject::UpdateStatus + include Mandate + + initialize_with :user_project + + def call + user_project.update!(status:) + end + + def status + return :available if user_project.solutions.any?(&:in_progress?) + + num_unlocked_exercises = user_project.unlocked_exercises.count + num_solutions = user_project.solutions.count + + # If there are no unlocked exercises, the project is locked + return :locked if num_unlocked_exercises.zero? + + # If all solutions have an exercise and they're all complete, the project is complete + return :completed if num_solutions == num_unlocked_exercises && + user_project.solutions.all?(&:completed?) + + # If we have more exercises than solutions, then there's a new solution + # that can be created if the user wants to. + return :available if num_unlocked_exercises > num_solutions + + :locked + end +end diff --git a/app/models/bootcamp/exercise.rb b/app/models/bootcamp/exercise.rb index 8b9cd8154c..1c95016d03 100644 --- a/app/models/bootcamp/exercise.rb +++ b/app/models/bootcamp/exercise.rb @@ -11,10 +11,10 @@ class Bootcamp::Exercise < ApplicationRecord has_many :concepts, through: :exercise_concepts default_scope -> { order(:idx) } - scope :unlocked, -> { where('level_idx < ?', Settings.level_idx) } + scope :unlocked, -> { where('level_idx < ?', Bootcamp::Settings.level_idx) } def to_param = slug - def locked? = level_idx > Settings.level_idx + def locked? = level_idx > Bootcamp::Settings.level_idx def unlocked? = !locked? def concepts = super.to_a.sort diff --git a/app/models/bootcamp/settings.rb b/app/models/bootcamp/settings.rb index 1a67272f1c..4b9839fbb8 100644 --- a/app/models/bootcamp/settings.rb +++ b/app/models/bootcamp/settings.rb @@ -2,7 +2,7 @@ class Bootcamp::Settings < ApplicationRecord self.table_name = "bootcamp_settings" def self.instance - @instance = Settings.first || Settings.create! + @instance = first || create! end # DO NOT memoize these. diff --git a/app/models/bootcamp/user_project.rb b/app/models/bootcamp/user_project.rb index c4d1ecc0be..d8abd0de3a 100644 --- a/app/models/bootcamp/user_project.rb +++ b/app/models/bootcamp/user_project.rb @@ -19,7 +19,7 @@ def self.for!(user, project) # memoize def solutions - Solution.where(user:, exercise: project.exercises). + Bootcamp::Solution.where(user:, exercise: project.exercises). includes(:exercise). to_a end diff --git a/app/models/user.rb b/app/models/user.rb index 590f79f70b..c33e6e79f1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -131,7 +131,7 @@ class User < ApplicationRecord has_many :bootcamp_solutions, dependent: :destroy, class_name: "Bootcamp::Solution" has_many :bootcamp_user_projects, dependent: :destroy, class_name: "Bootcamp::UserProject" - has_many :bootcamp_projects, through: :user_projects + has_many :bootcamp_projects, through: :bootcamp_user_projects, source: :project scope :random, -> { order('RAND()') } diff --git a/db/schema.rb b/db/schema.rb index 7ea6429ade..34f4920064 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -1416,6 +1416,7 @@ t.string "ppp_country" t.string "checkout_session_id" t.text "utm" + t.integer :level_idx, null: false, default: 0 t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["user_id"], name: "index_user_bootcamp_data_on_user_id", unique: true diff --git a/test/commands/bootcamp/select_next_exercise_test.rb b/test/commands/bootcamp/select_next_exercise_test.rb new file mode 100644 index 0000000000..477c13ce73 --- /dev/null +++ b/test/commands/bootcamp/select_next_exercise_test.rb @@ -0,0 +1,93 @@ +require 'test_helper' + +class Bootcamp::SelectNextExerciseTest < ActiveSupport::TestCase + def setup + super + + Bootcamp::Settings.instance.update(level_idx: 10) + end + + test "returns exercise" do + user = create :user, :with_bootcamp_data + exercise = create :bootcamp_exercise + + actual = Bootcamp::SelectNextExercise.(user) + assert_equal exercise, actual + end + + test "returns exercise with lowest idx" do + user = create :user, :with_bootcamp_data + create :bootcamp_exercise, idx: 2 + exercise = create :bootcamp_exercise, idx: 1 + create :bootcamp_exercise, idx: 3 + + actual = Bootcamp::SelectNextExercise.(user) + assert_equal exercise, actual + end + + test "doesn't return completed exercise" do + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + solved_exercise = create(:bootcamp_exercise, idx: 1, project:) + exercise = create(:bootcamp_exercise, idx: 2, project:) + + create :bootcamp_solution, user:, exercise: solved_exercise, completed_at: Time.current + + actual = Bootcamp::SelectNextExercise.(user) + assert_equal exercise, actual + end + + test "doesn't return completed exercise for user_project" do + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + solved_exercise = create(:bootcamp_exercise, idx: 1, project:) + exercise = create(:bootcamp_exercise, idx: 2, project:) + create :bootcamp_user_project, user:, project:, status: :available + + create :bootcamp_solution, :completed, user:, exercise: solved_exercise + + actual = Bootcamp::SelectNextExercise.(user) + assert_equal exercise, actual + end + + test "prefers exercise from existing user project" do + user = create :user, :with_bootcamp_data + create :bootcamp_exercise, idx: 1 + exercise = create :bootcamp_exercise, idx: 2 + create :bootcamp_user_project, user:, project: exercise.project, status: :available + + actual = Bootcamp::SelectNextExercise.(user) + assert_equal exercise, actual + end + + test "doesn't take exercise from locked user project" do + user = create :user, :with_bootcamp_data + locked = create :bootcamp_exercise, idx: 1 + exercise = create :bootcamp_exercise, idx: 2 + create :bootcamp_user_project, user:, project: locked.project, status: :locked + + actual = Bootcamp::SelectNextExercise.(user) + assert_equal exercise, actual + end + + test "honours passed in project" do + user = create :user, :with_bootcamp_data + other = create :bootcamp_exercise, idx: 1 + exercise = create :bootcamp_exercise, idx: 2 + create :bootcamp_user_project, user:, project: other.project, status: :available + create :bootcamp_user_project, user:, project: exercise.project, status: :available + + actual = Bootcamp::SelectNextExercise.(user, project: exercise.project) + assert_equal exercise, actual + end + + test "copes with locked project passed in project" do + user = create :user, :with_bootcamp_data + locked = create :bootcamp_exercise, idx: 1 + exercise = create :bootcamp_exercise, idx: 2 + create :bootcamp_user_project, user:, project: locked.project, status: :locked + + actual = Bootcamp::SelectNextExercise.(user, project: locked.project) + assert_equal exercise, actual + end +end diff --git a/test/commands/bootcamp/solution/complete_test.rb b/test/commands/bootcamp/solution/complete_test.rb new file mode 100644 index 0000000000..d4f0a3a23a --- /dev/null +++ b/test/commands/bootcamp/solution/complete_test.rb @@ -0,0 +1,31 @@ +require 'test_helper' + +class Bootcamp::Solution::CompleteTest < ActiveSupport::TestCase + test "completes the solution" do + freeze_time do + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + create(:bootcamp_user_project, user:, project:) + exercise = create(:bootcamp_exercise, project:) + solution = create :bootcamp_solution, exercise:, user:, completed_at: Time.current + + Bootcamp::Solution::Complete.(solution) + + assert_equal Time.current, solution.completed_at + assert solution.completed? + end + end + + test "updates the status of the project" do + freeze_time do + user = create :user + project = create :bootcamp_project + user_project = create(:bootcamp_user_project, user:, project:) + exercise = create(:bootcamp_exercise, project:) + solution = create :bootcamp_solution, exercise:, user:, completed_at: Time.current + + Bootcamp::UserProject::UpdateStatus.expects(:call).with(user_project) + Bootcamp::Solution::Complete.(solution) + end + end +end diff --git a/test/commands/bootcamp/solution/create_test.rb b/test/commands/bootcamp/solution/create_test.rb new file mode 100644 index 0000000000..d30c5a774b --- /dev/null +++ b/test/commands/bootcamp/solution/create_test.rb @@ -0,0 +1,67 @@ +require 'test_helper' + +class Bootcamp::Solution::CreateTest < ActiveSupport::TestCase + test "works normally" do + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + create :bootcamp_user_project, user:, project:, status: :available + exercise = create(:bootcamp_exercise, project:) + exercise.stubs(:stub).returns("Something") + + solution = Bootcamp::Solution::Create.(user, exercise) + assert solution.persisted? + assert_equal user, solution.user + assert_equal exercise, solution.exercise + end + + test "sets basic code" do + code = "def foo\nend" + + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + create :bootcamp_user_project, user:, project:, status: :available + exercise = create(:bootcamp_exercise, project:) + exercise.stubs(:stub).returns(code) + + solution = Bootcamp::Solution::Create.(user, exercise) + assert_equal code, solution.code + end + + test "uses solutions from previous exercises" do + exercise_1_slug = "part-1" + exercise_2_slug = "ex-2" + + solution_1_code = "first\nbit" + solution_2_code = "second\ppart" + template = "Hello {{EXERCISE_#{exercise_1_slug}}} World {{EXERCISE_#{exercise_2_slug}}} Yay!" + expected = "Hello #{solution_1_code} World #{solution_2_code} Yay!" + + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + create :bootcamp_user_project, user:, project:, status: :available + exercise_1 = create :bootcamp_exercise, project:, slug: exercise_1_slug + exercise_2 = create :bootcamp_exercise, project:, slug: exercise_2_slug + exercise_3 = create(:bootcamp_exercise, project:) + exercise_3.stubs(:stub).returns(template) + + create :bootcamp_solution, user:, exercise: exercise_1, code: solution_1_code, completed_at: Time.current + create :bootcamp_solution, user:, exercise: exercise_2, code: solution_2_code, completed_at: Time.current + + solution = Bootcamp::Solution::Create.(user, exercise_3) + + assert_equal expected, solution.code + end + + test "guards against not available exercises" do + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + create(:bootcamp_user_project, user:, project:) + exercise = create(:bootcamp_exercise, project:) + + Bootcamp::UserProject.any_instance.expects(:exercise_available?).with(exercise).returns(false) + + assert_raises ExerciseLockedError do + Bootcamp::Solution::Create.(user, exercise) + end + end +end diff --git a/test/commands/bootcamp/submission/create_test.rb b/test/commands/bootcamp/submission/create_test.rb new file mode 100644 index 0000000000..9ff2d9124a --- /dev/null +++ b/test/commands/bootcamp/submission/create_test.rb @@ -0,0 +1,47 @@ +require 'test_helper' + +class Bootcamp::Submission::CreateTest < ActiveSupport::TestCase + test "creates a submission" do + solution = create :bootcamp_solution + code = "puts 'hello'" + test_results = { + status: "fail", + tests: [ + test_1: 'pass', + test_2: 'fail' + ] + } + readonly_ranges = [{ from: '0', to: '4' }, { from: '6', to: '11' }] + + submission = Bootcamp::Submission::Create.(solution, code, test_results, readonly_ranges) + + assert_equal solution, submission.solution + assert_equal code, submission.code + assert_equal test_results, submission.test_results + assert_equal readonly_ranges, submission.readonly_ranges + end + + test "fail fails" do + submission = Bootcamp::Submission::Create.( + create(:bootcamp_solution), "", + { + status: "fail", tests: [] + }, + [] + ) + + assert_equal :fail, submission.status + end + + test "pass passes" do + submission = Bootcamp::Submission::Create.( + create(:bootcamp_solution), "", + { + status: "pass", tests: [] + }, + [] + ) + + assert_equal :pass, submission.status + end +end diff --git a/test/commands/bootcamp/update_level_test.rb b/test/commands/bootcamp/update_level_test.rb new file mode 100644 index 0000000000..a552c2afdc --- /dev/null +++ b/test/commands/bootcamp/update_level_test.rb @@ -0,0 +1,73 @@ +require 'test_helper' + +class Bootcamp::UpdateUserLevelTest < ActiveSupport::TestCase + test "sets to 0 with no exercises" do + user = create :user, :with_bootcamp_data + + Bootcamp::UpdateUserLevel.(user) + + assert_equal 0, user.bootcamp_data.level_idx + end + + test "sets to 0 with no completed exercises" do + user = create :user, :with_bootcamp_data + create :bootcamp_exercise + + Bootcamp::UpdateUserLevel.(user) + + assert_equal 0, user.bootcamp_data.level_idx + end + + test "sets to level when completed" do + user = create :user, :with_bootcamp_data + create :bootcamp_level, idx: 1 + exercise = create :bootcamp_exercise, level_idx: 1 + create(:bootcamp_solution, :completed, user:, exercise:) + + Bootcamp::UpdateUserLevel.(user) + + assert_equal 1, user.bootcamp_data.level_idx + end + + test "does not set when not all completed" do + user = create :user, :with_bootcamp_data + create :bootcamp_level, idx: 1 + create :bootcamp_solution, user:, exercise: create(:bootcamp_exercise, level_idx: 1) + create :bootcamp_solution, :completed, user:, exercise: create(:bootcamp_exercise, level_idx: 1) + + Bootcamp::UpdateUserLevel.(user) + + assert_equal 0, user.bootcamp_data.level_idx + end + + test "sets to highest level when multiple completed" do + user = create :user, :with_bootcamp_data + create :bootcamp_level, idx: 1 + create :bootcamp_level, idx: 2 + exercise_1 = create :bootcamp_exercise, level_idx: 1 + exercise_2 = create :bootcamp_exercise, level_idx: 2 + create :bootcamp_solution, :completed, user:, exercise: exercise_1 + create :bootcamp_solution, :completed, user:, exercise: exercise_2 + + Bootcamp::UpdateUserLevel.(user) + + assert_equal 2, user.bootcamp_data.level_idx + end + + test "requires consecutive levels" do + user = create :user, :with_bootcamp_data + create :bootcamp_level, idx: 1 + create :bootcamp_level, idx: 2 + create :bootcamp_level, idx: 3 + exercise_1 = create :bootcamp_exercise, level_idx: 1 + exercise_2 = create :bootcamp_exercise, level_idx: 2 + exercise_3 = create :bootcamp_exercise, level_idx: 3 + create :bootcamp_solution, :completed, user:, exercise: exercise_1 + create :bootcamp_solution, user:, exercise: exercise_2 + create :bootcamp_solution, :completed, user:, exercise: exercise_3 + + Bootcamp::UpdateUserLevel.(user) + + assert_equal 1, user.bootcamp_data.level_idx + end +end diff --git a/test/commands/bootcamp/user_project/update_status_test.rb b/test/commands/bootcamp/user_project/update_status_test.rb new file mode 100644 index 0000000000..48c41c1f6c --- /dev/null +++ b/test/commands/bootcamp/user_project/update_status_test.rb @@ -0,0 +1,44 @@ +require 'test_helper' + +class Bootcamp::UserProject::UpdateStatusTest < ActiveSupport::TestCase + test "locked with no exercises" do + # This is mainly a sanity test for the rest + project = create :bootcamp_project + user_project = create(:bootcamp_user_project, project:) + + Bootcamp::UserProject::UpdateStatus.(user_project) + assert_equal :locked, user_project.status + end + + test "available with an exercise with no solution" do + # This is mainly a sanity test for the rest + project = create :bootcamp_project + create(:bootcamp_exercise, project:) + user_project = create(:bootcamp_user_project, project:) + + Bootcamp::UserProject::UpdateStatus.(user_project) + assert_equal :available, user_project.status + end + + test "available if there's an in progress solution" do + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + exercise = create(:bootcamp_exercise, project:) + create(:bootcamp_solution, exercise:, user:) + + user_project = create(:bootcamp_user_project, user:, project:) + Bootcamp::UserProject::UpdateStatus.(user_project) + assert_equal :available, user_project.status + end + + test "completed if all exercises have completed solutions" do + user = create :user, :with_bootcamp_data + project = create :bootcamp_project + exercise = create(:bootcamp_exercise, project:) + create :bootcamp_solution, exercise:, user:, completed_at: Time.current + + user_project = create(:bootcamp_user_project, user:, project:) + Bootcamp::UserProject::UpdateStatus.(user_project) + assert_equal :completed, user_project.status + end +end diff --git a/test/factories/bootcamp/user_projects.rb b/test/factories/bootcamp/user_projects.rb index 276251c2e0..a610fbe87f 100644 --- a/test/factories/bootcamp/user_projects.rb +++ b/test/factories/bootcamp/user_projects.rb @@ -1,6 +1,6 @@ FactoryBot.define do factory :bootcamp_user_project, class: "Bootcamp::UserProject" do - user + user { create(:user, :with_bootcamp_data) } project { create(:bootcamp_project) } end end diff --git a/test/factories/users.rb b/test/factories/users.rb index ec8c15d361..68946d2ddf 100644 --- a/test/factories/users.rb +++ b/test/factories/users.rb @@ -124,5 +124,11 @@ ) end end + + trait :with_bootcamp_data do + after(:create) do |user, _evaluator| + user.create_bootcamp_data!(paid_at: Time.current) + end + end end end diff --git a/test/test_helper.rb b/test/test_helper.rb index b3b849f7a1..2488d7d4bc 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -138,7 +138,7 @@ def ==(other) opensearch.indices.delete(index:) if opensearch.indices.exists(index:) opensearch.indices.create(index:) end -Exercism::TOUCHED_OPENSEARCH_INDEXES = [].freeze +Exercism::TOUCHED_OPENSEARCH_INDEXES = [] # rubocop:disable Style/MutableConstant class ActionMailer::TestCase def assert_email(email, to, subject, fixture, bulk: false) # rubocop:disable Lint/UnusedMethodArgument From 6445180460620c6a80c92280715a3157ed5d1175 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Mon, 30 Dec 2024 16:40:32 +0000 Subject: [PATCH 04/38] Add CSS and content --- app/controllers/bootcamp/base_controller.rb | 15 ++ .../bootcamp/concepts_controller.rb | 9 + .../bootcamp/dashboard_controller.rb | 6 + .../bootcamp/exercises_controller.rb | 22 ++ app/controllers/bootcamp/levels_controller.rb | 9 + .../bootcamp/projects_controller.rb | 17 ++ app/css/bootcamp/components/breadcrumbs.css | 36 +++ app/css/bootcamp/components/codemirror.css | 87 +++++++ app/css/bootcamp/components/completed-bar.css | 25 ++ .../bootcamp/components/concept-widget.css | 15 ++ .../components/editor-information-tooltip.css | 54 +++++ .../bootcamp/components/exercise-widget.css | 63 +++++ app/css/bootcamp/components/nav.css | 7 + .../bootcamp/components/project-widget.css | 56 +++++ app/css/bootcamp/components/prose.css | 87 +++++++ app/css/bootcamp/components/rhs-list.css | 19 ++ app/css/bootcamp/components/scrubber.css | 61 +++++ app/css/bootcamp/components/site-header.css | 20 ++ .../components/solve-exercise-page.css | 6 + app/css/bootcamp/components/tasks.css | 70 ++++++ app/css/bootcamp/components/test-buttons.css | 16 ++ app/css/bootcamp/components/toggle-switch.css | 75 ++++++ app/css/bootcamp/exercises/draw.css | 13 ++ app/css/bootcamp/exercises/maze.css | 136 +++++++++++ app/css/bootcamp/exercises/wordle.css | 51 +++++ app/css/bootcamp/pages/admin/base.css | 8 + app/css/bootcamp/pages/admin/exercises.css | 76 ++++++ app/css/bootcamp/pages/concept.css | 44 ++++ app/css/bootcamp/pages/dashboard.css | 44 ++++ app/css/bootcamp/pages/level.css | 35 +++ app/css/bootcamp/pages/project.css | 44 ++++ app/css/bootcamp/pages/projects.css | 29 +++ app/css/bootcamp/variables.css | 5 + app/css/packs/bootcamp-ui.css | 36 +++ app/css/pages/bootcamp/admin/base.css | 8 + app/css/pages/bootcamp/admin/exercises.css | 76 ++++++ app/css/pages/bootcamp/concept.css | 45 ++++ app/css/pages/bootcamp/dashboard.css | 44 ++++ app/css/pages/bootcamp/level.css | 35 +++ app/css/pages/bootcamp/project.css | 44 ++++ app/css/pages/bootcamp/projects.css | 29 +++ .../bootcamp/concept_widget.rb | 11 + .../bootcamp/exercise_widget.rb | 29 +++ .../bootcamp/project_widget.rb | 20 ++ app/views/bootcamp/concepts/index.html.haml | 5 + app/views/bootcamp/concepts/show.html.haml | 39 ++++ .../bootcamp/dashboard/_exercise.html.haml | 13 ++ app/views/bootcamp/dashboard/index.html.haml | 15 ++ app/views/bootcamp/exercises/edit.html.haml | 21 ++ app/views/bootcamp/exercises/index.html.haml | 4 + app/views/bootcamp/exercises/show.html.haml | 3 + app/views/bootcamp/index.html.haml | 2 +- app/views/bootcamp/levels/index.html.haml | 13 ++ app/views/bootcamp/levels/show.html.haml | 43 ++++ app/views/bootcamp/projects/index.html.haml | 15 ++ app/views/bootcamp/projects/show.html.haml | 41 ++++ .../bootcamp/concept_widget.html.haml | 3 + .../bootcamp/exercise_widget.html.haml | 13 ++ .../bootcamp/project_widget.html.haml | 8 + app/views/layouts/bootcamp-ui.haml | 42 ++++ bootcamp_content/concepts/arrays.md | 0 bootcamp_content/concepts/conditionals.md | 0 bootcamp_content/concepts/config.json | 63 +++++ bootcamp_content/concepts/data-types.md | 8 + bootcamp_content/concepts/functions-using.md | 0 bootcamp_content/concepts/functions.md | 5 + bootcamp_content/concepts/loops-repeat.md | 0 .../concepts/strings-concatenation.md | 113 +++++++++ bootcamp_content/concepts/strings-using.md | 46 ++++ bootcamp_content/concepts/strings.md | 5 + bootcamp_content/exploration/maze/index.html | 15 ++ bootcamp_content/exploration/maze/script.js | 164 +++++++++++++ bootcamp_content/exploration/maze/style.css | 70 ++++++ bootcamp_content/levels/1.md | 34 +++ bootcamp_content/levels/2.md | 7 + bootcamp_content/levels/3.md | 0 bootcamp_content/levels/4.md | 0 bootcamp_content/levels/config.json | 18 ++ bootcamp_content/projects/drawing/config.json | 6 + .../drawing/exercises/loops/config.json | 49 ++++ .../drawing/exercises/loops/example.jk | 7 + .../drawing/exercises/loops/introduction.md | 15 ++ .../projects/drawing/exercises/loops/stub.jk | 4 + .../drawing/exercises/loops/task-1.md | 5 + .../drawing/exercises/loops/task-2.md | 7 + .../projects/drawing/introduction.md | 25 ++ bootcamp_content/projects/drawing/tree.jiki | 14 ++ bootcamp_content/projects/maze/config.json | 6 + .../exercises/automated-solve/config.json | 216 ++++++++++++++++++ .../maze/exercises/automated-solve/example.jk | 14 ++ .../exercises/automated-solve/introduction.md | 11 + .../maze/exercises/automated-solve/stub.jk | 6 + .../maze/exercises/automated-solve/task-1.md | 8 + .../maze/exercises/automated-solve/task-2.md | 8 + .../maze/exercises/automated-solve/task-3.md | 8 + .../maze/exercises/automated-solve/task-4.md | 8 + .../maze/exercises/implement-move/config.json | 124 ++++++++++ .../maze/exercises/implement-move/example.jk | 21 ++ .../exercises/implement-move/introduction.md | 19 ++ .../maze/exercises/implement-move/stub.jk | 5 + .../maze/exercises/implement-move/task-1.md | 3 + .../maze/exercises/implement-move/task-2.md | 3 + .../maze/exercises/implement-move/task-3.md | 3 + .../maze/exercises/manual-solve/config.json | 56 +++++ .../maze/exercises/manual-solve/example.jk | 6 + .../exercises/manual-solve/introduction.md | 11 + .../maze/exercises/manual-solve/stub.jk | 6 + .../maze/exercises/manual-solve/task-1.md | 8 + .../projects/maze/introduction.md | 7 + .../projects/number-puzzles/config.json | 6 + .../exercises/even-or-odd/config.json | 63 +++++ .../exercises/even-or-odd/example.jk | 7 + .../exercises/even-or-odd/introduction.md | 19 ++ .../exercises/even-or-odd/stub.jk | 5 + .../exercises/even-or-odd/task-1.md | 3 + .../exercises/even-or-odd/task-2.md | 3 + .../exercises/even-or-odd/task-3.md | 3 + .../positive-negative-or-zero/config.json | 63 +++++ .../positive-negative-or-zero/example.jk | 9 + .../positive-negative-or-zero/introduction.md | 3 + .../positive-negative-or-zero/stub.jk | 5 + .../positive-negative-or-zero/task-1.md | 3 + .../positive-negative-or-zero/task-2.md | 3 + .../positive-negative-or-zero/task-3.md | 5 + .../projects/number-puzzles/introduction.md | 5 + .../projects/rock-paper-scissors/config.json | 6 + .../exercises/basic/config.json | 104 +++++++++ .../exercises/basic/example.jk | 27 +++ .../exercises/basic/introduction.md | 11 + .../exercises/basic/stub.jk | 5 + .../exercises/basic/task-1.md | 9 + .../exercises/basic/task-2.md | 7 + .../exercises/basic/task-3.md | 5 + .../rock-paper-scissors/introduction.md | 21 ++ bootcamp_content/projects/two-fer/config.json | 6 + .../two-fer/exercises/basic/config.json | 46 ++++ .../two-fer/exercises/basic/example.jk | 7 + .../two-fer/exercises/basic/introduction.md | 15 ++ .../projects/two-fer/exercises/basic/stub.jk | 3 + .../two-fer/exercises/basic/task-1.md | 5 + .../two-fer/exercises/basic/task-2.md | 7 + .../projects/two-fer/introduction.md | 25 ++ bootcamp_content/projects/wordle/config.json | 6 + .../exercises/process-guess/config.json | 28 +++ .../wordle/exercises/process-guess/example.jk | 6 + .../exercises/process-guess/introduction.md | 11 + .../wordle/exercises/process-guess/stub.jk | 0 .../wordle/exercises/process-guess/task-1.md | 8 + .../projects/wordle/introduction.md | 7 + config/routes.rb | 2 + config/routes/bootcamp.rb | 24 ++ db/bootcamp_seeds.rb | 82 +++++++ tailwind.config.js | 34 +++ 153 files changed, 3875 insertions(+), 1 deletion(-) create mode 100644 app/controllers/bootcamp/base_controller.rb create mode 100644 app/controllers/bootcamp/concepts_controller.rb create mode 100644 app/controllers/bootcamp/dashboard_controller.rb create mode 100644 app/controllers/bootcamp/exercises_controller.rb create mode 100644 app/controllers/bootcamp/levels_controller.rb create mode 100644 app/controllers/bootcamp/projects_controller.rb create mode 100644 app/css/bootcamp/components/breadcrumbs.css create mode 100644 app/css/bootcamp/components/codemirror.css create mode 100644 app/css/bootcamp/components/completed-bar.css create mode 100644 app/css/bootcamp/components/concept-widget.css create mode 100644 app/css/bootcamp/components/editor-information-tooltip.css create mode 100644 app/css/bootcamp/components/exercise-widget.css create mode 100644 app/css/bootcamp/components/nav.css create mode 100644 app/css/bootcamp/components/project-widget.css create mode 100644 app/css/bootcamp/components/prose.css create mode 100644 app/css/bootcamp/components/rhs-list.css create mode 100644 app/css/bootcamp/components/scrubber.css create mode 100644 app/css/bootcamp/components/site-header.css create mode 100644 app/css/bootcamp/components/solve-exercise-page.css create mode 100644 app/css/bootcamp/components/tasks.css create mode 100644 app/css/bootcamp/components/test-buttons.css create mode 100644 app/css/bootcamp/components/toggle-switch.css create mode 100644 app/css/bootcamp/exercises/draw.css create mode 100644 app/css/bootcamp/exercises/maze.css create mode 100644 app/css/bootcamp/exercises/wordle.css create mode 100644 app/css/bootcamp/pages/admin/base.css create mode 100644 app/css/bootcamp/pages/admin/exercises.css create mode 100644 app/css/bootcamp/pages/concept.css create mode 100644 app/css/bootcamp/pages/dashboard.css create mode 100644 app/css/bootcamp/pages/level.css create mode 100644 app/css/bootcamp/pages/project.css create mode 100644 app/css/bootcamp/pages/projects.css create mode 100644 app/css/bootcamp/variables.css create mode 100644 app/css/packs/bootcamp-ui.css create mode 100644 app/css/pages/bootcamp/admin/base.css create mode 100644 app/css/pages/bootcamp/admin/exercises.css create mode 100644 app/css/pages/bootcamp/concept.css create mode 100644 app/css/pages/bootcamp/dashboard.css create mode 100644 app/css/pages/bootcamp/level.css create mode 100644 app/css/pages/bootcamp/project.css create mode 100644 app/css/pages/bootcamp/projects.css create mode 100644 app/helpers/view_components/bootcamp/concept_widget.rb create mode 100644 app/helpers/view_components/bootcamp/exercise_widget.rb create mode 100644 app/helpers/view_components/bootcamp/project_widget.rb create mode 100644 app/views/bootcamp/concepts/index.html.haml create mode 100644 app/views/bootcamp/concepts/show.html.haml create mode 100644 app/views/bootcamp/dashboard/_exercise.html.haml create mode 100644 app/views/bootcamp/dashboard/index.html.haml create mode 100644 app/views/bootcamp/exercises/edit.html.haml create mode 100644 app/views/bootcamp/exercises/index.html.haml create mode 100644 app/views/bootcamp/exercises/show.html.haml create mode 100644 app/views/bootcamp/levels/index.html.haml create mode 100644 app/views/bootcamp/levels/show.html.haml create mode 100644 app/views/bootcamp/projects/index.html.haml create mode 100644 app/views/bootcamp/projects/show.html.haml create mode 100644 app/views/components/bootcamp/concept_widget.html.haml create mode 100644 app/views/components/bootcamp/exercise_widget.html.haml create mode 100644 app/views/components/bootcamp/project_widget.html.haml create mode 100644 app/views/layouts/bootcamp-ui.haml create mode 100644 bootcamp_content/concepts/arrays.md create mode 100644 bootcamp_content/concepts/conditionals.md create mode 100644 bootcamp_content/concepts/config.json create mode 100644 bootcamp_content/concepts/data-types.md create mode 100644 bootcamp_content/concepts/functions-using.md create mode 100644 bootcamp_content/concepts/functions.md create mode 100644 bootcamp_content/concepts/loops-repeat.md create mode 100644 bootcamp_content/concepts/strings-concatenation.md create mode 100644 bootcamp_content/concepts/strings-using.md create mode 100644 bootcamp_content/concepts/strings.md create mode 100644 bootcamp_content/exploration/maze/index.html create mode 100644 bootcamp_content/exploration/maze/script.js create mode 100644 bootcamp_content/exploration/maze/style.css create mode 100644 bootcamp_content/levels/1.md create mode 100644 bootcamp_content/levels/2.md create mode 100644 bootcamp_content/levels/3.md create mode 100644 bootcamp_content/levels/4.md create mode 100644 bootcamp_content/levels/config.json create mode 100644 bootcamp_content/projects/drawing/config.json create mode 100644 bootcamp_content/projects/drawing/exercises/loops/config.json create mode 100644 bootcamp_content/projects/drawing/exercises/loops/example.jk create mode 100644 bootcamp_content/projects/drawing/exercises/loops/introduction.md create mode 100644 bootcamp_content/projects/drawing/exercises/loops/stub.jk create mode 100644 bootcamp_content/projects/drawing/exercises/loops/task-1.md create mode 100644 bootcamp_content/projects/drawing/exercises/loops/task-2.md create mode 100644 bootcamp_content/projects/drawing/introduction.md create mode 100644 bootcamp_content/projects/drawing/tree.jiki create mode 100644 bootcamp_content/projects/maze/config.json create mode 100644 bootcamp_content/projects/maze/exercises/automated-solve/config.json create mode 100644 bootcamp_content/projects/maze/exercises/automated-solve/example.jk create mode 100644 bootcamp_content/projects/maze/exercises/automated-solve/introduction.md create mode 100644 bootcamp_content/projects/maze/exercises/automated-solve/stub.jk create mode 100644 bootcamp_content/projects/maze/exercises/automated-solve/task-1.md create mode 100644 bootcamp_content/projects/maze/exercises/automated-solve/task-2.md create mode 100644 bootcamp_content/projects/maze/exercises/automated-solve/task-3.md create mode 100644 bootcamp_content/projects/maze/exercises/automated-solve/task-4.md create mode 100644 bootcamp_content/projects/maze/exercises/implement-move/config.json create mode 100644 bootcamp_content/projects/maze/exercises/implement-move/example.jk create mode 100644 bootcamp_content/projects/maze/exercises/implement-move/introduction.md create mode 100644 bootcamp_content/projects/maze/exercises/implement-move/stub.jk create mode 100644 bootcamp_content/projects/maze/exercises/implement-move/task-1.md create mode 100644 bootcamp_content/projects/maze/exercises/implement-move/task-2.md create mode 100644 bootcamp_content/projects/maze/exercises/implement-move/task-3.md create mode 100644 bootcamp_content/projects/maze/exercises/manual-solve/config.json create mode 100644 bootcamp_content/projects/maze/exercises/manual-solve/example.jk create mode 100644 bootcamp_content/projects/maze/exercises/manual-solve/introduction.md create mode 100644 bootcamp_content/projects/maze/exercises/manual-solve/stub.jk create mode 100644 bootcamp_content/projects/maze/exercises/manual-solve/task-1.md create mode 100644 bootcamp_content/projects/maze/introduction.md create mode 100644 bootcamp_content/projects/number-puzzles/config.json create mode 100644 bootcamp_content/projects/number-puzzles/exercises/even-or-odd/config.json create mode 100644 bootcamp_content/projects/number-puzzles/exercises/even-or-odd/example.jk create mode 100644 bootcamp_content/projects/number-puzzles/exercises/even-or-odd/introduction.md create mode 100644 bootcamp_content/projects/number-puzzles/exercises/even-or-odd/stub.jk create mode 100644 bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-1.md create mode 100644 bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-2.md create mode 100644 bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-3.md create mode 100644 bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/config.json create mode 100644 bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/example.jk create mode 100644 bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/introduction.md create mode 100644 bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/stub.jk create mode 100644 bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-1.md create mode 100644 bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-2.md create mode 100644 bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-3.md create mode 100644 bootcamp_content/projects/number-puzzles/introduction.md create mode 100644 bootcamp_content/projects/rock-paper-scissors/config.json create mode 100644 bootcamp_content/projects/rock-paper-scissors/exercises/basic/config.json create mode 100644 bootcamp_content/projects/rock-paper-scissors/exercises/basic/example.jk create mode 100644 bootcamp_content/projects/rock-paper-scissors/exercises/basic/introduction.md create mode 100644 bootcamp_content/projects/rock-paper-scissors/exercises/basic/stub.jk create mode 100644 bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-1.md create mode 100644 bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-2.md create mode 100644 bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-3.md create mode 100644 bootcamp_content/projects/rock-paper-scissors/introduction.md create mode 100644 bootcamp_content/projects/two-fer/config.json create mode 100644 bootcamp_content/projects/two-fer/exercises/basic/config.json create mode 100644 bootcamp_content/projects/two-fer/exercises/basic/example.jk create mode 100644 bootcamp_content/projects/two-fer/exercises/basic/introduction.md create mode 100644 bootcamp_content/projects/two-fer/exercises/basic/stub.jk create mode 100644 bootcamp_content/projects/two-fer/exercises/basic/task-1.md create mode 100644 bootcamp_content/projects/two-fer/exercises/basic/task-2.md create mode 100644 bootcamp_content/projects/two-fer/introduction.md create mode 100644 bootcamp_content/projects/wordle/config.json create mode 100644 bootcamp_content/projects/wordle/exercises/process-guess/config.json create mode 100644 bootcamp_content/projects/wordle/exercises/process-guess/example.jk create mode 100644 bootcamp_content/projects/wordle/exercises/process-guess/introduction.md create mode 100644 bootcamp_content/projects/wordle/exercises/process-guess/stub.jk create mode 100644 bootcamp_content/projects/wordle/exercises/process-guess/task-1.md create mode 100644 bootcamp_content/projects/wordle/introduction.md create mode 100644 config/routes/bootcamp.rb create mode 100644 db/bootcamp_seeds.rb diff --git a/app/controllers/bootcamp/base_controller.rb b/app/controllers/bootcamp/base_controller.rb new file mode 100644 index 0000000000..a811eaff30 --- /dev/null +++ b/app/controllers/bootcamp/base_controller.rb @@ -0,0 +1,15 @@ +class Bootcamp::BaseController < ApplicationController + layout "bootcamp-ui" + + def use_project + @project = Bootcamp::Project.find_by!(slug: params[:project_slug]) + end + + def use_exercise + @exercise = @project.exercises.find_by!(slug: params[:exercise_slug]) + end + + def use_solution + @solution = current_user.bootcamp_solutions.find_by!(uuid: params[:solution_uuid]) + end +end diff --git a/app/controllers/bootcamp/concepts_controller.rb b/app/controllers/bootcamp/concepts_controller.rb new file mode 100644 index 0000000000..c05c713433 --- /dev/null +++ b/app/controllers/bootcamp/concepts_controller.rb @@ -0,0 +1,9 @@ +class Bootcamp::ConceptsController < Bootcamp::BaseController + def index + @concepts = Bootcamp::Concept.all + end + + def show + @concept = Bootcamp::Concept.find_by!(slug: params[:slug]) + end +end diff --git a/app/controllers/bootcamp/dashboard_controller.rb b/app/controllers/bootcamp/dashboard_controller.rb new file mode 100644 index 0000000000..3a953a5555 --- /dev/null +++ b/app/controllers/bootcamp/dashboard_controller.rb @@ -0,0 +1,6 @@ +class Bootcamp::DashboardController < Bootcamp::BaseController + def index + @exercise = Bootcamp::SelectNextExercise.(current_user) + @solution = current_user.bootcamp_solutions.find_by(exercise: @exercise) + end +end diff --git a/app/controllers/bootcamp/exercises_controller.rb b/app/controllers/bootcamp/exercises_controller.rb new file mode 100644 index 0000000000..937d83f089 --- /dev/null +++ b/app/controllers/bootcamp/exercises_controller.rb @@ -0,0 +1,22 @@ +class Bootcamp::ExercisesController < Bootcamp::BaseController + before_action :use_project + before_action :use_exercise, only: %i[show edit] + + def index + @exercises = Bootcamp::Exercise.all + end + + def show + redirect_to action: :edit + end + + def edit + @solution = Bootcamp::Solution::Create.(current_user, @exercise) + rescue ExerciseLockedError + redirect_to action: :show + end + + def use_exercise + @exercise = @project.exercises.find_by!(slug: params[:slug]) + end +end diff --git a/app/controllers/bootcamp/levels_controller.rb b/app/controllers/bootcamp/levels_controller.rb new file mode 100644 index 0000000000..80289570a6 --- /dev/null +++ b/app/controllers/bootcamp/levels_controller.rb @@ -0,0 +1,9 @@ +class Bootcamp::LevelsController < Bootcamp::BaseController + def index + @levels = Bootcamp::Level.all.index_by(&:idx) + end + + def show + @level = Bootcamp::Level.find_by!(idx: params[:idx]) + end +end diff --git a/app/controllers/bootcamp/projects_controller.rb b/app/controllers/bootcamp/projects_controller.rb new file mode 100644 index 0000000000..18dcb3c6ef --- /dev/null +++ b/app/controllers/bootcamp/projects_controller.rb @@ -0,0 +1,17 @@ +class Bootcamp::ProjectsController < Bootcamp::BaseController + before_action :use_project, only: %i[show] + + def index + @user_projects = current_user.bootcamp_user_projects + end + + def show + @exercises = @project.exercises + @solutions = current_user.bootcamp_solutions.where(exercise: @exercises).index_by(&:exercise_id) + end + + def use_project + @project = Bootcamp::Project.find_by!(slug: params[:slug]) + @user_project = current_user.bootcamp_user_projects.find_by!(project: @project) + end +end diff --git a/app/css/bootcamp/components/breadcrumbs.css b/app/css/bootcamp/components/breadcrumbs.css new file mode 100644 index 0000000000..50b9f9e01a --- /dev/null +++ b/app/css/bootcamp/components/breadcrumbs.css @@ -0,0 +1,36 @@ +.c-breadcrumbs { + @apply border-b-1 border-[#c8d5ef] mb-20; + + .container { + @apply flex items-center; + @apply py-12; + @apply text-14 text-gray-800 leading-150; + @apply overflow-x-auto; + } + + a { + @apply text-lightBlue; + @apply font-medium; + @apply mr-16; + @apply flex items-center; + @apply whitespace-nowrap; + + .c-icon { + height: 20px; + width: 20px; + @apply mr-8; + filter: var(--primary-blue-filter); + } + } + .seperator { + @apply text-15 text-[#6E82AA]; + @apply mr-16; + } + .title { + @apply mr-16; + @apply whitespace-nowrap; + } + .seperator { + @apply mr-16; + } +} diff --git a/app/css/bootcamp/components/codemirror.css b/app/css/bootcamp/components/codemirror.css new file mode 100644 index 0000000000..9e977e557f --- /dev/null +++ b/app/css/bootcamp/components/codemirror.css @@ -0,0 +1,87 @@ +@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"); + +.editor-wrapper { + overflow: hidden; + @apply h-[60%] flex-grow-0; + @apply rounded-br-3; + @apply border-1 border-slate-400; +} +.editor { + height: 100%; + background: #fff; + overflow-y: auto; + @apply flex flex-grow; + + .cm-gutters { + background: transparent; + @apply border-r-0; + } + .cm-lineNumbers .cm-gutterElement, + .cm-icon-container-gutter .cm-gutterElement { + @apply grid items-center; + /* @apply p-0; */ + } + + .cm-icon-container-gutter .cm-gutterElement { + @apply px-4; + } + .cm-line { + padding: 2px 2px 2px 6px; + } + .cm-lockedLine, + .cm-lockedGutter { + opacity: 0.6; + background: #eee; + } + .ͼ1 .cm-underline { + text-decoration: none; + border-bottom: 2px solid red; + background: rgba(255, 0, 0, 0.2); + } +} +.cm-editor { + font-family: "Source Code Pro", "Courier New", Courier, monospace; + text-align: left; + width: 100%; + color: #aaa; + font-size: 16px; + + .cm-scroller { + font-family: "Source Code Pro", "Courier New", Courier, monospace; + } + .cm-foldGutter span { + display: none; + } + .cm-gutterElement { + @apply pl-12 pr-8; + } +} + +.declaration-arrow { + position: absolute; +} + +.cm-line { + display: flex; + align-items: center; +} + +.custom-tooltip { + font-family: Poppins; + font-size: 14px; + padding: 4px; + color: #130b43; + line-height: 160%; + background: #ffd38f; + border-radius: 8px; +} + +.cm-tooltip { + border: none !important; +} + +.cm-lineNumbers { + /* width: 2em; */ + text-align: right; +} diff --git a/app/css/bootcamp/components/completed-bar.css b/app/css/bootcamp/components/completed-bar.css new file mode 100644 index 0000000000..cf8cfbf2d7 --- /dev/null +++ b/app/css/bootcamp/components/completed-bar.css @@ -0,0 +1,25 @@ +.c-completed-bar { + @apply flex items-center py-12 px-32 shadow-lg rounded-8 mb-24; + @apply border-2 border-darkGreen; + @apply bg-[#B8EADB]; + + .check-mark-icon { + height: 32px; + width: 32px; + @apply mr-16; + } + .text { + @apply flex-grow; + @apply text-18 leading-150 font-semibold text-gray-900; + } + .stat { + @apply font-semibold text-gray-600; + } + + c-prominent-link { + @apply text-lightBlue; + /* .c-icon { + filter: var(--iconFilterNotificationsProminentLink); + } */ + } +} diff --git a/app/css/bootcamp/components/concept-widget.css b/app/css/bootcamp/components/concept-widget.css new file mode 100644 index 0000000000..9c9daf8200 --- /dev/null +++ b/app/css/bootcamp/components/concept-widget.css @@ -0,0 +1,15 @@ +.c-concept-widget { + @apply py-12 px-16 rounded-8 border-1 block; + @apply flex flex-col items-stretch; + @apply bg-white; + @apply shadow-base; + + .title { + @apply text-17 leading-140; + @apply font-semibold; + @apply mb-4; + } + .description { + @apply text-15 leading-140; + } +} diff --git a/app/css/bootcamp/components/editor-information-tooltip.css b/app/css/bootcamp/components/editor-information-tooltip.css new file mode 100644 index 0000000000..143b01a68c --- /dev/null +++ b/app/css/bootcamp/components/editor-information-tooltip.css @@ -0,0 +1,54 @@ +.information-tooltip { + max-width: 450px; + transition: opacity 0.3s; + @apply z-tooltip; + /* pointer-events: none; */ + @apply text-15 leading-150; + @apply absolute rounded-8 opacity-0; + + & :not(pre) > code { + @apply bg-thick-border-blue px-[6px] py-[1px] rounded-5; + } + + pre { + @apply mt-4; + } + + p:not(:last-of-type) { + @apply mb-10; + } + + &.description { + @apply py-16 px-20; + @apply bg-white text-primary-blue; + + filter: drop-shadow(0px 4px 8px rgba(79, 114, 205, 0.5)); + .tooltip-arrow { + @apply bg-white; + } + } + + &.error { + @apply bg-white border-2 border-red-500; + + filter: drop-shadow(0px 4px 8px rgba(79, 114, 205, 0.5)); + + .tooltip-arrow { + @apply bg-white border-2 border-red-500; + } + + h2 { + @apply text-red-900; + @apply font-semibold; + @apply py-8 px-20; + @apply relative z-tooltip-content bg-red-100; + @apply rounded-t-8; + } + .content { + @apply text-primary-blue; + @apply pt-10 px-20 pb-12; + @apply relative z-tooltip-content bg-white; + @apply rounded-b-8; + } + } +} diff --git a/app/css/bootcamp/components/exercise-widget.css b/app/css/bootcamp/components/exercise-widget.css new file mode 100644 index 0000000000..e1a7897603 --- /dev/null +++ b/app/css/bootcamp/components/exercise-widget.css @@ -0,0 +1,63 @@ +.c-exercise-widget { + @apply py-12 px-12 rounded-8 border-1 block; + @apply flex flex-col items-stretch; + @apply bg-white; + + &.available, + &.in_progress { + @apply shadow-base; + + .tag { + @apply border-gray-300; + background-image: url("icons/available.svg"); + } + } + &.completed { + } + &.locked { + @apply bg-gray-200; + @apply opacity-[0.5] cursor-not-allowed; + + .tag { + @apply border-gray-400; + background-image: url("icons/lock.svg"); + } + } + + img { + @apply w-[80px] h-[80px] mr-12; + } + + .title { + @apply mr-12; + } + .project-title { + @apply text-14 leading-150; + @apply font-semibold text-gray-900; + } + .exercise-title { + @apply text-17 leading-140; + @apply font-semibold; + @apply mb-2; + } + .description { + @apply text-15 leading-140; + } + .tag { + width: 20px; + height: 20px; + flex-shrink: 0; + background-position: center center; + background-size: 12px; + background-repeat: no-repeat; + + @apply ml-auto; + @apply border-1 rounded-circle; + + &.completed { + background: #e7fdf6; + border-color: #43b593; + color: #43b593; + } + } +} diff --git a/app/css/bootcamp/components/nav.css b/app/css/bootcamp/components/nav.css new file mode 100644 index 0000000000..b9c10312a3 --- /dev/null +++ b/app/css/bootcamp/components/nav.css @@ -0,0 +1,7 @@ +.c-nav { + @apply flex flex-row items-center gap-10; + @apply mb-12; + a { + @apply font-semibold text-16 text-[blue]; + } +} diff --git a/app/css/bootcamp/components/project-widget.css b/app/css/bootcamp/components/project-widget.css new file mode 100644 index 0000000000..f8f5533ba6 --- /dev/null +++ b/app/css/bootcamp/components/project-widget.css @@ -0,0 +1,56 @@ +.c-project-widget { + @apply py-12 px-16 rounded-8 border-1 block; + @apply flex flex-col items-stretch; + @apply bg-white; + @apply relative; + + &.available { + @apply shadow-base; + + .tag { + @apply border-gray-300; + background-image: url("icons/available.svg"); + } + } + &.completed { + } + &.locked { + @apply bg-gray-200; + @apply opacity-[0.5] cursor-not-allowed; + + .tag { + @apply border-gray-400; + background-image: url("icons/lock.svg"); + } + } + + img { + @apply w-[80px] h-[80px] mr-16; + } + + .title { + @apply text-17 leading-140; + @apply font-semibold; + @apply mb-2; + } + .description { + @apply text-15 leading-140; + } + .tag { + width: 20px; + height: 20px; + flex-shrink: 0; + background-position: center center; + background-size: 12px; + background-repeat: no-repeat; + + @apply ml-auto; + @apply border-1 rounded-circle; + + &.completed { + background: #e7fdf6; + border-color: #43b593; + color: #43b593; + } + } +} diff --git a/app/css/bootcamp/components/prose.css b/app/css/bootcamp/components/prose.css new file mode 100644 index 0000000000..7adcf39a1c --- /dev/null +++ b/app/css/bootcamp/components/prose.css @@ -0,0 +1,87 @@ +.c-prose { + --prose-base-text-size: 19px; + &.c-prose-small { + --prose-base-text-size: 18px; + } + h3 { + font-size: calc(var(--prose-base-text-size) + 3px); + @apply leading-140; + @apply font-semibold; + } + + h4 { + font-size: calc(var(--prose-base-text-size) + 1px); + @apply leading-140; + @apply font-semibold; + } + + p, + li { + font-size: var(--prose-base-text-size); + @apply leading-150; + } + ul { + @apply list-disc; + } + ol { + @apply list-decimal; + } + ul, + ol { + @apply ml-20; + } + li { + &:not(:last-child) { + @apply mb-4; + } + } + pre { + @apply bg-blue-100; + @apply px-12 py-12; + @apply rounded-8; + code { + font-size: calc(var(--prose-base-text-size) - 1px); + } + } + *:not(pre) > code { + @apply bg-blue-100; + @apply py-2 px-4; + @apply rounded-5; + font-size: calc(var(--prose-base-text-size) - 3px); + @apply whitespace-nowrap; + } + strong { + @apply font-semibold; + } + + h3 + p, + h3 + pre, + h3 + ul, + h3 + ol, + h3 + div, + h4 + p, + h4 + pre, + h4 + ul, + h4 + ol, + h4 + div { + @apply mt-6; + } + p + ul { + @apply mt-4; + } + p + p, + ul + p { + @apply mt-12; + } + p + pre { + @apply my-8; + } + pre + p { + @apply mt-12; + } + + * + h3, + * + h4 { + @apply mt-20; + } +} diff --git a/app/css/bootcamp/components/rhs-list.css b/app/css/bootcamp/components/rhs-list.css new file mode 100644 index 0000000000..760a7ca3c3 --- /dev/null +++ b/app/css/bootcamp/components/rhs-list.css @@ -0,0 +1,19 @@ +.c-rhs-list { + h2 { + @apply text-22 leading-140; + + @apply font-semibold; + @apply mb-4; + } + p { + @apply text-16 leading-140; + @apply mb-16; + } + + ul { + @apply flex flex-col gap-16; + } +} +.c-rhs-list + .c-rhs-list { + @apply mt-20; +} diff --git a/app/css/bootcamp/components/scrubber.css b/app/css/bootcamp/components/scrubber.css new file mode 100644 index 0000000000..285806d9b3 --- /dev/null +++ b/app/css/bootcamp/components/scrubber.css @@ -0,0 +1,61 @@ +#scrubber { + background: white; + padding: 8px; + @apply border-t-2 border-t-jiki-purple border-opacity-50; + @apply flex justify-center items-center gap-8; + + input[type="range"] { + -webkit-appearance: none; + @apply flex-grow; + height: 9px; + border-radius: 100px; + border: 1px solid; + @apply border-jiki-purple; + box-shadow: 2px 2px 5px 0px rgba(0, 0, 0, 0.12) inset; + + &::-webkit-slider-thumb { + -webkit-appearance: none; + width: 24px; + height: 24px; + border-radius: 100%; + @apply outline-2 outline-white; + @apply bg-jiki-purple; + box-shadow: 0 0 1px 1px white; + cursor: pointer; + background-image: url("/scrubber.svg"); + background-size: 13px; + @apply bg-no-repeat bg-center; + &:hover { + @apply bg-jiki-purple; + } + } + &::-moz-range-thumb { + @apply bg-jiki-purple; + width: 35px; + width: 18px; + border-radius: 20px; + cursor: pointer; + } + } + + .frame-stepper-buttons, + .play-button { + img { + width: 24px; + height: 24px; + filter: invert(27%) sepia(88%) saturate(6980%) hue-rotate(260deg) + brightness(95%) contrast(102%); + } + } + + .frame-stepper-buttons { + display: flex; + justify-content: space-between; + align-items: center; + gap: 8px; + + button { + @apply border-1 border-indigo-300 rounded-5; + } + } +} diff --git a/app/css/bootcamp/components/site-header.css b/app/css/bootcamp/components/site-header.css new file mode 100644 index 0000000000..ff0bdb9f64 --- /dev/null +++ b/app/css/bootcamp/components/site-header.css @@ -0,0 +1,20 @@ +.c-site-header { + @apply bg-white; + @apply border-b-1 border-[#ccc]; + .container { + @apply py-16; + @apply flex flex-row gap-8 items-center; + img { + filter: invert(1); + } + .content { + @apply text-18; + } + } +} + +body.controller-exercises.action-edit { + .c-site-header { + display: none; + } +} diff --git a/app/css/bootcamp/components/solve-exercise-page.css b/app/css/bootcamp/components/solve-exercise-page.css new file mode 100644 index 0000000000..506c726870 --- /dev/null +++ b/app/css/bootcamp/components/solve-exercise-page.css @@ -0,0 +1,6 @@ +#solve-exercise-page { + .scenario-lhs { + @apply w-[50%] max-w-[350px]; + @apply flex-shrink-0; + } +} diff --git a/app/css/bootcamp/components/tasks.css b/app/css/bootcamp/components/tasks.css new file mode 100644 index 0000000000..2c07a9bb83 --- /dev/null +++ b/app/css/bootcamp/components/tasks.css @@ -0,0 +1,70 @@ +#tasks { + @apply bg-background-purple; + @apply h-[40%] py-16 px-24; + @apply flex-grow-0 flex-shrink-0; + @apply border-t-1 border-thin-border-blue; + + h2 { + @apply mb-8; + } + + .list { + @apply flex flex-col gap-[12px]; + } + + .task { + @apply flex gap-12 items-center; + @apply relative; + @apply text-15; + + .imgs { + @apply block w-[18px] h-[18px]; + @apply flex-shrink-0; + @apply relative; + + img { + @apply absolute inset-0; + @apply block w-full h-full; + @apply opacity-0; + transition: opacity ease-in 0.5s; + } + } + .confetti { + height: 120px; + width: 120px; + position: absolute; + left: -50px; + top: -50px; + @apply z-overlay; + } + + &.hidden { + display: none; + opacity: 0; + max-height: 0; + } + + &.inactive { + opacity: 0.5; + /* transition: all 0.8s ease-in 1s; */ + } + + &.active { + opacity: 1; + max-height: 70px; + transition: all 0.3s ease-in 0.3s, opacity 0.1s ease-in 0.4s; + .pending-icon { + @apply opacity-100; + } + } + + &.completed { + filter: grayscale(1); + opacity: 0.5; + transition: all 0.3s ease-in 300ms; + .completed-icon { + opacity: 1; + } + } + } +} diff --git a/app/css/bootcamp/components/test-buttons.css b/app/css/bootcamp/components/test-buttons.css new file mode 100644 index 0000000000..2cd698ea48 --- /dev/null +++ b/app/css/bootcamp/components/test-buttons.css @@ -0,0 +1,16 @@ +.test-button { + @apply relative p-4 w-[32px] h-[32px] grid place-content-center rounded-5; + transition: background-color 0.3s ease-out; + + &.idle { + background-color: #f59e0b; + } + + &.pass { + background-color: #22c55e; + } + + &.fail { + background-color: #e11d48; + } +} diff --git a/app/css/bootcamp/components/toggle-switch.css b/app/css/bootcamp/components/toggle-switch.css new file mode 100644 index 0000000000..6808e3b8aa --- /dev/null +++ b/app/css/bootcamp/components/toggle-switch.css @@ -0,0 +1,75 @@ +:root { + --switch-width: 40px; + --switch-height: calc(var(--switch-width) / 2); + --slider-background-color: #ccc; + --slider-checked-background-color: #7128f5; + --slider-focus-box-shadow: 0 0 1px var(--slider-checked-background-color); + --thumb-size: calc(var(--switch-height) - 8px); + --thumb-left-offset: 4px; + --thumb-bottom-offset: 4px; + --thumb-background-color: white; + --transition-duration: 100ms; +} + +.switch { + position: relative; + display: inline-block; + width: var(--switch-width); + height: var(--switch-height); +} + +/* Hide default HTML checkbox */ +.switch input { + opacity: 0; + width: 0; + height: 0; +} + +/* The slider */ +.slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--slider-background-color); + transition: var(--transition-duration); +} + +.slider:before { + position: absolute; + content: ""; + height: var(--thumb-size); + width: var(--thumb-size); + left: var(--thumb-left-offset); + bottom: var(--thumb-bottom-offset); + background-color: var(--thumb-background-color); + transition: var(--transition-duration); +} + +input:checked + .slider { + background-color: var(--slider-checked-background-color); +} + +input:focus + .slider { + box-shadow: var(--slider-focus-box-shadow); +} + +input:checked + .slider:before { + transform: translateX( + calc( + var(--switch-width) - var(--thumb-size) - var(--thumb-left-offset) * + 2 + ) + ); +} + +/* Rounded sliders */ +.slider.round { + border-radius: calc(var(--switch-height) / 2); +} + +.slider.round:before { + border-radius: 50%; +} diff --git a/app/css/bootcamp/exercises/draw.css b/app/css/bootcamp/exercises/draw.css new file mode 100644 index 0000000000..ffcb93f8ae --- /dev/null +++ b/app/css/bootcamp/exercises/draw.css @@ -0,0 +1,13 @@ +#solve-exercise-page { + .exercise-draw { + @apply border-1 border-gray-500; + .bg-grid { + @apply absolute inset-0; + } + .canvas { + @apply absolute inset-0; + width: 100%; + height: 100%; + } + } +} diff --git a/app/css/bootcamp/exercises/maze.css b/app/css/bootcamp/exercises/maze.css new file mode 100644 index 0000000000..061b382239 --- /dev/null +++ b/app/css/bootcamp/exercises/maze.css @@ -0,0 +1,136 @@ +#view-container { + position: relative; + padding: 10px; + background: white; + container-type: size; + + aspect-ratio: 1; + /* min-width: 50%; + max-width: 70%; */ + flex-shrink: 1; + /* flex-grow: 1; */ + /* + & > *:first-child { + width: 100%; + height: 100%; + position: relative; + &:before { + content: ""; + padding-top: 100%; + } + } + */ + .exercise-container { + aspect-ratio: 1; + max-height: 100cqh; + max-width: 100cqw; + background: red; + position: relative; + } +} + +.exercise-maze { + --cellWidth: calc(100% / var(--gridSize)); + + .cells { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + border: 0; + + display: grid; + grid-template-columns: repeat(var(--gridSize), var(--cellWidth)); + grid-template-rows: repeat(var(--gridSize), var(--cellWidth)); + gap: 0px; + + .cell { + width: 100%; + height: 100%; + /* width: var(--cellWidth); + height: var(--cellWidth); */ + background-color: white; + border: 0.5px solid #000; + &.blocked { + background-color: red; + } + &.start { + background-color: lightblue; + } + &.target { + background-color: lightgreen; + } + &.bomb { + background-color: purple; + } + } + + .character { + width: calc(var(--cellWidth) * 0.7); + height: calc(var(--cellWidth) * 0.7); + background-color: lightblue; + border: 1px solid green; + border-radius: 50%; + position: absolute; + margin-left: 5px; + margin-top: 4px; + top: 0; + left: 0; + + &::before, + &::after { + content: ""; + position: absolute; + width: 7px; + height: 7px; + background-color: green; + border-radius: 50%; + bottom: 80%; + } + + &::before { + left: 55%; + } + + &::after { + right: 55%; + } + } + } + + .character { + width: calc(var(--cellWidth) * 0.7); + height: calc(var(--cellWidth) * 0.7); + background-color: lightblue; + border: 1px solid green; + border-radius: 50%; + position: absolute; + margin-left: 5px; + margin-top: 4px; + top: 0; + left: 0; + + &::before, + &::after { + content: ""; + position: absolute; + width: 7px; + height: 7px; + background-color: green; + border-radius: 50%; + bottom: 70%; + } + + &::before { + left: 55%; + } + + &::after { + right: 55%; + } + } + .canvas { + } +} diff --git a/app/css/bootcamp/exercises/wordle.css b/app/css/bootcamp/exercises/wordle.css new file mode 100644 index 0000000000..ea538befbd --- /dev/null +++ b/app/css/bootcamp/exercises/wordle.css @@ -0,0 +1,51 @@ +.exercise-wordle { + .board { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + right: 0; + border: 0; + + display: grid; + gap: 1%; + grid-template-rows: repeat(6, 1fr); + } + + .guess { + display: grid; + gap: 1%; + grid-template-columns: repeat(5, 1fr); + container-type: size; + } + + .letter { + height: 100%; + font-size: 70cqh; + background-color: #d3d3d3; + border: 1px solid #ccc; + display: flex; + justify-content: center; + align-items: center; + font-weight: bold; + text-transform: uppercase; + color: #333; + position: relative; + } + + .letter[data-state="correct"] { + background-color: #6aaa64; + color: white; + } + + .letter[data-state="present"] { + background-color: #c9b458; + color: white; + } + + .letter[data-state="absent"] { + background-color: #787c7e; + color: white; + } +} diff --git a/app/css/bootcamp/pages/admin/base.css b/app/css/bootcamp/pages/admin/base.css new file mode 100644 index 0000000000..1ce13b77b6 --- /dev/null +++ b/app/css/bootcamp/pages/admin/base.css @@ -0,0 +1,8 @@ +.page-admin { + h1 { + @apply font-semibold text-22 mb-20; + } + h2 { + @apply font-semibold text-18 mb-8; + } +} diff --git a/app/css/bootcamp/pages/admin/exercises.css b/app/css/bootcamp/pages/admin/exercises.css new file mode 100644 index 0000000000..286a37dd27 --- /dev/null +++ b/app/css/bootcamp/pages/admin/exercises.css @@ -0,0 +1,76 @@ +#page-admin-exercises { + table { + width: 100%; + border-collapse: collapse; + margin-bottom: 20px; + thead { + background-color: #f5f5f5; + } + th { + text-align: left; + } + thead th { + border-bottom: 1px solid #ddd; + } + tbody { + td { + border-bottom: 1px solid #ddd; + a { + @apply text-blue-500 font-semibold; + } + } + } + th, + td { + padding: 10px; + border: 1px solid #eee; + + &:first-child { + width: 1px; + } + &:nth-child(2) { + width: 250px; + } + &:nth-child(3) { + width: 20px; + @apply relative; + } + + &:nth-child(4) { + } + &:nth-child(5), + &:nth-child(6) { + width: 1px; + @apply whitespace-nowrap; + @apply text-right; + } + } + .level { + @apply absolute inset-0 p-10; + @apply flex flex-col justify-center; + @apply font-semibold text-right; + &.positive { + @apply bg-green-100 text-green-700; + } + &.negative { + @apply bg-red-100 text-red-700; + } + } + .bubbles { + @apply flex flex-wrap gap-6; + } + .bubble { + @apply text-gray-600; + @apply border-1 border-gray-400; + @apply rounded-5; + @apply py-2 px-4; + @apply text-13 font-semibold; + &.locked { + @apply bg-red-100 text-red-500 border-red-300; + } + &.unlocked { + @apply bg-green-100 text-green-500 border-green-300; + } + } + } +} diff --git a/app/css/bootcamp/pages/concept.css b/app/css/bootcamp/pages/concept.css new file mode 100644 index 0000000000..e800c29e3f --- /dev/null +++ b/app/css/bootcamp/pages/concept.css @@ -0,0 +1,44 @@ +body.controller-concepts.action-show { + @apply bg-grad-basic; +} +#page-concept { + header { + @apply pb-16; + .details { + @apply flex items-center gap-20; + } + /* img { + @apply w-[128px] h-[128px]; + } */ + h1 { + @apply text-[39px] leading-140; + @apply font-bold; + } + } + .nav { + @apply flex flex-row items-center gap-10; + @apply mb-12; + a { + @apply font-semibold text-16 text-[blue]; + } + } + + .lhs { + @apply max-w-[800px]; + } + .rhs { + @apply flex-grow w-full max-w-[380px] ml-auto; + } + + ul.descendants { + @apply list-disc pl-6 mt-10; + li { + @apply text-16; + @apply mb-4; + a { + display: inline-flex; + flex-direction: column; + } + } + } +} diff --git a/app/css/bootcamp/pages/dashboard.css b/app/css/bootcamp/pages/dashboard.css new file mode 100644 index 0000000000..f0d7e9918d --- /dev/null +++ b/app/css/bootcamp/pages/dashboard.css @@ -0,0 +1,44 @@ +#page-dashboard { + h2 { + @apply text-20 leading-150; + @apply font-semibold; + @apply mb-4; + } + p { + @apply text-16 leading-150; + @apply mb-8; + } + + .exercise { + @apply py-12 px-16 rounded-8 border-1 block; + @apply shadow-base flex flex-col items-stretch; + @apply bg-white; + + h3 { + @apply text-20 leading-150; + @apply mb-4; + @apply font-semibold; + } + h4 { + @apply text-16 leading-150; + @apply mb-4; + @apply font-semibold; + } + .tag { + @apply flex items-center; + @apply border-1 rounded-100; + @apply font-semibold leading-170; + @apply px-12 py-4 ml-auto; + @apply whitespace-nowrap; + + &.completed { + background: #e7fdf6; + border-color: #43b593; + color: #43b593; + } + } + p { + @apply text-15 leading-140; + } + } +} diff --git a/app/css/bootcamp/pages/level.css b/app/css/bootcamp/pages/level.css new file mode 100644 index 0000000000..71ae9a61f1 --- /dev/null +++ b/app/css/bootcamp/pages/level.css @@ -0,0 +1,35 @@ +#page-level { + header { + @apply bg-grad-basic; + @apply pb-16; + + .details { + @apply flex flex-col items-start; + .status { + @apply border-1 rounded-100; + @apply font-semibold leading-170; + @apply px-12 py-4; + @apply whitespace-nowrap; + &.completed { + @apply bg-green-100 text-green-700 border-green-400; + } + &.in-progress { + @apply bg-blue-100 text-blue-700 border-blue-400; + } + } + } + /* img { + @apply w-[128px] h-[128px]; + } */ + h1 { + @apply text-[39px] leading-140; + @apply font-bold; + } + } + .lhs { + /* @apply flex-grow; */ + } + .rhs { + @apply flex-grow w-full max-w-[400px]; + } +} diff --git a/app/css/bootcamp/pages/project.css b/app/css/bootcamp/pages/project.css new file mode 100644 index 0000000000..a12da8e746 --- /dev/null +++ b/app/css/bootcamp/pages/project.css @@ -0,0 +1,44 @@ +body.controller-projects.action-show { + @apply bg-grad-basic; +} +#page-project { + header { + .project-bar { + @apply flex items-center gap-20 mb-20; + img { + @apply w-[128px] h-[128px]; + } + h1 { + @apply text-[39px] leading-140; + @apply font-bold; + } + .tags { + @apply flex; + .tag { + @apply flex items-center; + @apply border-1 rounded-100; + @apply font-semibold leading-170; + @apply px-12 py-4; + @apply whitespace-nowrap; + + &.completed { + background: #e7fdf6; + border-color: #43b593; + color: #43b593; + } + } + } + } + } + .lhs { + .introduction { + @apply max-w-[700px]; + } + } + .rhs { + @apply w-[400px] flex-shrink-0; + @apply ml-auto; + } + .introduction { + } +} diff --git a/app/css/bootcamp/pages/projects.css b/app/css/bootcamp/pages/projects.css new file mode 100644 index 0000000000..549cdbb893 --- /dev/null +++ b/app/css/bootcamp/pages/projects.css @@ -0,0 +1,29 @@ +body.controller-projects.action-index { + @apply bg-grad-basic; +} +#page-projects { + header { + .title-bar { + @apply pb-20; + h1 { + @apply text-[39px] leading-140; + @apply font-bold; + @apply mb-4; + } + p { + @apply text-18 leading-140; + } + } + } + .lhs { + .introduction { + @apply max-w-[700px]; + } + } + .rhs { + @apply w-[400px] flex-shrink-0; + @apply ml-auto; + } + .introduction { + } +} diff --git a/app/css/bootcamp/variables.css b/app/css/bootcamp/variables.css new file mode 100644 index 0000000000..6ded0b84ce --- /dev/null +++ b/app/css/bootcamp/variables.css @@ -0,0 +1,5 @@ +.bg-grad-basic { + background-image: linear-gradient(#e1ebff, rgba(225, 235, 255, 0)); + background-size: 20%; + background-repeat: repeat-x; +} diff --git a/app/css/packs/bootcamp-ui.css b/app/css/packs/bootcamp-ui.css new file mode 100644 index 0000000000..70174c68fe --- /dev/null +++ b/app/css/packs/bootcamp-ui.css @@ -0,0 +1,36 @@ +@import "../tailwind"; +@import "../defaults"; +@import "../fonts"; +@import "../ui-kit/all"; + +@import "../bootcamp/variables"; + +@import "../bootcamp/components/solve-exercise-page"; +@import "../bootcamp/components/rhs-list"; +@import "../bootcamp/components/breadcrumbs"; +@import "../bootcamp/components/completed-bar"; +@import "../bootcamp/components/site-header"; +@import "../bootcamp/components/codemirror"; +@import "../bootcamp/components/scrubber"; +@import "../bootcamp/components/prose"; +@import "../bootcamp/components/editor-information-tooltip"; +@import "../bootcamp/components/tasks"; +@import "../bootcamp/components/toggle-switch"; +@import "../bootcamp/components/test-buttons"; + +@import "../bootcamp/components/project-widget"; +@import "../bootcamp/components/exercise-widget"; +@import "../bootcamp/components/concept-widget"; + +@import "../bootcamp/pages/dashboard"; +@import "../bootcamp/pages/projects"; +@import "../bootcamp/pages/project"; +@import "../bootcamp/pages/concept"; +@import "../bootcamp/pages/level"; + +@import "../bootcamp/pages/admin/base"; +@import "../bootcamp/pages/admin/exercises"; + +@import "../bootcamp/exercises/draw.css"; +@import "../bootcamp/exercises/maze.css"; +@import "../bootcamp/exercises/wordle.css"; diff --git a/app/css/pages/bootcamp/admin/base.css b/app/css/pages/bootcamp/admin/base.css new file mode 100644 index 0000000000..a2328cc1a8 --- /dev/null +++ b/app/css/pages/bootcamp/admin/base.css @@ -0,0 +1,8 @@ +.page-bootcamp-admin { + h1 { + @apply font-semibold text-22 mb-20; + } + h2 { + @apply font-semibold text-18 mb-8; + } +} diff --git a/app/css/pages/bootcamp/admin/exercises.css b/app/css/pages/bootcamp/admin/exercises.css new file mode 100644 index 0000000000..907f118b35 --- /dev/null +++ b/app/css/pages/bootcamp/admin/exercises.css @@ -0,0 +1,76 @@ +#page-bootcamp-admin-exercises { + table { + width: 100%; + border-collapse: collapse; + margin-bottom: 20px; + thead { + background-color: #f5f5f5; + } + th { + text-align: left; + } + thead th { + border-bottom: 1px solid #ddd; + } + tbody { + td { + border-bottom: 1px solid #ddd; + a { + @apply text-blue-500 font-semibold; + } + } + } + th, + td { + padding: 10px; + border: 1px solid #eee; + + &:first-child { + width: 1px; + } + &:nth-child(2) { + width: 250px; + } + &:nth-child(3) { + width: 20px; + @apply relative; + } + + &:nth-child(4) { + } + &:nth-child(5), + &:nth-child(6) { + width: 1px; + @apply whitespace-nowrap; + @apply text-right; + } + } + .level { + @apply absolute inset-0 p-10; + @apply flex flex-col justify-center; + @apply font-semibold text-right; + &.positive { + @apply bg-green-100 text-green-700; + } + &.negative { + @apply bg-red-100 text-red-700; + } + } + .bubbles { + @apply flex flex-wrap gap-6; + } + .bubble { + @apply text-gray-600; + @apply border-1 border-gray-400; + @apply rounded-5; + @apply py-2 px-4; + @apply text-13 font-semibold; + &.locked { + @apply bg-red-100 text-red-500 border-red-300; + } + &.unlocked { + @apply bg-green-100 text-green-500 border-green-300; + } + } + } +} diff --git a/app/css/pages/bootcamp/concept.css b/app/css/pages/bootcamp/concept.css new file mode 100644 index 0000000000..b5032e7f73 --- /dev/null +++ b/app/css/pages/bootcamp/concept.css @@ -0,0 +1,45 @@ +body.namespace-bootcamp.controller-concepts.action-show { + @apply bg-grad-basic; +} +#page-bootcamp-concept { + header { + @apply pb-16; + .details { + @apply flex items-center gap-20; + } + /* img { + @apply w-[128px] h-[128px]; + } */ + h1 { + @apply text-[39px] leading-140; + @apply font-bold; + } + } + + .nav { + @apply flex flex-row items-center gap-10; + @apply mb-12; + a { + @apply font-semibold text-16 text-[blue]; + } + } + + .lhs { + @apply max-w-[800px]; + } + .rhs { + @apply flex-grow w-full max-w-[380px] ml-auto; + } + + ul.descendants { + @apply list-disc pl-6 mt-10; + li { + @apply text-16; + @apply mb-4; + a { + display: inline-flex; + flex-direction: column; + } + } + } +} diff --git a/app/css/pages/bootcamp/dashboard.css b/app/css/pages/bootcamp/dashboard.css new file mode 100644 index 0000000000..6c63d865c7 --- /dev/null +++ b/app/css/pages/bootcamp/dashboard.css @@ -0,0 +1,44 @@ +#page-bootcamp-dashboard { + h2 { + @apply text-20 leading-150; + @apply font-semibold; + @apply mb-4; + } + p { + @apply text-16 leading-150; + @apply mb-8; + } + + .exercise { + @apply py-12 px-16 rounded-8 border-1 block; + @apply shadow-base flex flex-col items-stretch; + @apply bg-white; + + h3 { + @apply text-20 leading-150; + @apply mb-4; + @apply font-semibold; + } + h4 { + @apply text-16 leading-150; + @apply mb-4; + @apply font-semibold; + } + .tag { + @apply flex items-center; + @apply border-1 rounded-100; + @apply font-semibold leading-170; + @apply px-12 py-4 ml-auto; + @apply whitespace-nowrap; + + &.completed { + background: #e7fdf6; + border-color: #43b593; + color: #43b593; + } + } + p { + @apply text-15 leading-140; + } + } +} diff --git a/app/css/pages/bootcamp/level.css b/app/css/pages/bootcamp/level.css new file mode 100644 index 0000000000..e0455e358e --- /dev/null +++ b/app/css/pages/bootcamp/level.css @@ -0,0 +1,35 @@ +#page-bootcamp-level { + header { + @apply bg-grad-basic; + @apply pb-16; + + .details { + @apply flex flex-col items-start; + .status { + @apply border-1 rounded-100; + @apply font-semibold leading-170; + @apply px-12 py-4; + @apply whitespace-nowrap; + &.completed { + @apply bg-green-100 text-green-700 border-green-400; + } + &.in-progress { + @apply bg-blue-100 text-blue-700 border-blue-400; + } + } + } + /* img { + @apply w-[128px] h-[128px]; + } */ + h1 { + @apply text-[39px] leading-140; + @apply font-bold; + } + } + .lhs { + /* @apply flex-grow; */ + } + .rhs { + @apply flex-grow w-full max-w-[400px]; + } +} diff --git a/app/css/pages/bootcamp/project.css b/app/css/pages/bootcamp/project.css new file mode 100644 index 0000000000..1d413812ba --- /dev/null +++ b/app/css/pages/bootcamp/project.css @@ -0,0 +1,44 @@ +body.namespace-bootcamp.controller-projects.action-show { + @apply bg-grad-basic; +} +#page-bootcamp-project { + header { + .project-bar { + @apply flex items-center gap-20 mb-20; + img { + @apply w-[128px] h-[128px]; + } + h1 { + @apply text-[39px] leading-140; + @apply font-bold; + } + .tags { + @apply flex; + .tag { + @apply flex items-center; + @apply border-1 rounded-100; + @apply font-semibold leading-170; + @apply px-12 py-4; + @apply whitespace-nowrap; + + &.completed { + background: #e7fdf6; + border-color: #43b593; + color: #43b593; + } + } + } + } + } + .lhs { + .introduction { + @apply max-w-[700px]; + } + } + .rhs { + @apply w-[400px] flex-shrink-0; + @apply ml-auto; + } + .introduction { + } +} diff --git a/app/css/pages/bootcamp/projects.css b/app/css/pages/bootcamp/projects.css new file mode 100644 index 0000000000..e3878b59c3 --- /dev/null +++ b/app/css/pages/bootcamp/projects.css @@ -0,0 +1,29 @@ +body.namespace-bootcamp.controller-projects.action-index { + @apply bg-grad-basic; +} +#page-bootcamp-projects { + header { + .title-bar { + @apply pb-20; + h1 { + @apply text-[39px] leading-140; + @apply font-bold; + @apply mb-4; + } + p { + @apply text-18 leading-140; + } + } + } + .lhs { + .introduction { + @apply max-w-[700px]; + } + } + .rhs { + @apply w-[400px] flex-shrink-0; + @apply ml-auto; + } + .introduction { + } +} diff --git a/app/helpers/view_components/bootcamp/concept_widget.rb b/app/helpers/view_components/bootcamp/concept_widget.rb new file mode 100644 index 0000000000..c42fee585c --- /dev/null +++ b/app/helpers/view_components/bootcamp/concept_widget.rb @@ -0,0 +1,11 @@ +module ViewComponents + class Bootcamp::ConceptWidget < ViewComponent + initialize_with :concept + + def to_s + render template: "components/bootcamp/concept_widget", locals: { + concept: + } + end + end +end diff --git a/app/helpers/view_components/bootcamp/exercise_widget.rb b/app/helpers/view_components/bootcamp/exercise_widget.rb new file mode 100644 index 0000000000..25b9e85012 --- /dev/null +++ b/app/helpers/view_components/bootcamp/exercise_widget.rb @@ -0,0 +1,29 @@ +module ViewComponents + class Bootcamp::ExerciseWidget < ViewComponent + initialize_with :exercise, solution: nil, user_project: nil + + def to_s + render template: "components/bootcamp/exercise_widget", locals: { + exercise:, + project: exercise.project, + solution:, + status: + } + end + + private + def status + user_project.exercise_status(exercise, solution) + end + + memoize + def solution + @solution || current_user.solutions.find_by(exercise:) + end + + memoize + def user_project + @user_project || UserProject.for!(current_user, exercise.project) + end + end +end diff --git a/app/helpers/view_components/bootcamp/project_widget.rb b/app/helpers/view_components/bootcamp/project_widget.rb new file mode 100644 index 0000000000..97f160569b --- /dev/null +++ b/app/helpers/view_components/bootcamp/project_widget.rb @@ -0,0 +1,20 @@ +module ViewComponents + class Bootcamp::ProjectWidget < ViewComponent + initialize_with :project, user_project: nil + + def to_s + render template: "components/bootcamp/project_widget", locals: { + project:, + user_project:, + status: + } + end + + private + def status + return :locked unless user_project + + user_project.status + end + end +end diff --git a/app/views/bootcamp/concepts/index.html.haml b/app/views/bootcamp/concepts/index.html.haml new file mode 100644 index 0000000000..4ce55cebdc --- /dev/null +++ b/app/views/bootcamp/concepts/index.html.haml @@ -0,0 +1,5 @@ +#page-bootcamp-concepts + - @concepts.each do |concept| + = link_to concept do + %h2.font-semibold= concept.title + %p= concept.description diff --git a/app/views/bootcamp/concepts/show.html.haml b/app/views/bootcamp/concepts/show.html.haml new file mode 100644 index 0000000000..e8e50323e2 --- /dev/null +++ b/app/views/bootcamp/concepts/show.html.haml @@ -0,0 +1,39 @@ +#page-bootcamp-concept + %header + .c-breadcrumbs + .lg-container.container + = link_to concepts_path do + = graphical_icon 'concepts' + .span All Concepts + .seperator / + + - @concept.parents.each do |parent| + = link_to parent.title, concept_path(parent) + .seperator / + + .title= @concept.title + + .lg-container.details + %h1.font-semibold= @concept.title + + .lg-container + .flex + .lhs.pr-40 + .c-prose + = raw @concept.content_html + + - if @concept.descendants.any? + %h3 Subconcepts + %ul.descendants + - @concept.descendants.each do |concept| + %li + = link_to concept do + .font-semibold.text-primary-blue.text-18= concept.title + .text-16.leading-150= concept.description + .rhs + .c-rhs-list + %h2.mb-12 Exercises + %p These exercises have been designed to help you practice this concept. + %ul + - @concept.exercises.each do |exercise| + %li= render ViewComponents::Bootcamp::ExerciseWidget.new(exercise) diff --git a/app/views/bootcamp/dashboard/_exercise.html.haml b/app/views/bootcamp/dashboard/_exercise.html.haml new file mode 100644 index 0000000000..0aa0045ede --- /dev/null +++ b/app/views/bootcamp/dashboard/_exercise.html.haml @@ -0,0 +1,13 @@ +- solution ||= nil +- project = exercise.project +- status = solution ? solution.status : "available" += link_to [project, exercise], class: "exercise #{status}" do + .flex.items-center + .text + %h3 + = project.title + %h4 + Part #{exercise.idx + 1}. + = exercise.title + .tag= status.to_s.titleize + %p= exercise.description diff --git a/app/views/bootcamp/dashboard/index.html.haml b/app/views/bootcamp/dashboard/index.html.haml new file mode 100644 index 0000000000..5e13eb5612 --- /dev/null +++ b/app/views/bootcamp/dashboard/index.html.haml @@ -0,0 +1,15 @@ +#page-bootcamp-dashboard.pt-20 + .lg-container + .grid.grid-cols-2 + .lhs + - if @exercise + - if @solution + %h2 Continue Where You Left Off + %p You have an exercise in progress. + = render "exercise", exercise: @exercise, solution: @solution + - else + %h2 Start new exercise + %p You have a new exercise available to work on. + = render "exercise", exercise: @exercise + - else + You have no exercises available. diff --git a/app/views/bootcamp/exercises/edit.html.haml b/app/views/bootcamp/exercises/edit.html.haml new file mode 100644 index 0000000000..3d210038f7 --- /dev/null +++ b/app/views/bootcamp/exercises/edit.html.haml @@ -0,0 +1,21 @@ +- content_for :head do + %meta{ name: "turbo-visit-control", content: "reload" } += render ReactComponents::SolveExercisePage.new(@solution) + +-# + This is the entry point for the exercise editor... + + .p-10 + .meh + .font-semibold.mb-2 Receive a name, return a sentence. + %table.mb-2 + %tr + %th Input + %td "Susan" + %tr + %th Expected Output + %td "One for Susan, one for me!" + %tr + %th Actual Output + %td "One for Frank, one for me! + %button Show scenario diff --git a/app/views/bootcamp/exercises/index.html.haml b/app/views/bootcamp/exercises/index.html.haml new file mode 100644 index 0000000000..b720e4dad6 --- /dev/null +++ b/app/views/bootcamp/exercises/index.html.haml @@ -0,0 +1,4 @@ +- @exercises.each do |exercise| + = link_to exercise do + %h2.font-semibold= exercise.title + %p= exercise.description diff --git a/app/views/bootcamp/exercises/show.html.haml b/app/views/bootcamp/exercises/show.html.haml new file mode 100644 index 0000000000..7b8181c336 --- /dev/null +++ b/app/views/bootcamp/exercises/show.html.haml @@ -0,0 +1,3 @@ +%h1.font-semibold= @exercise.title + += raw @exercise.instructions_html diff --git a/app/views/bootcamp/index.html.haml b/app/views/bootcamp/index.html.haml index 9fbe709fac..b076a961cc 100644 --- a/app/views/bootcamp/index.html.haml +++ b/app/views/bootcamp/index.html.haml @@ -282,7 +282,7 @@ %strong Build a portfolio of projects. Create projects to showcase to potential employers while practicing your skills. .rhs - .dates.h3-sideheading.z-10 + .dates.h3-sideheading.z-overlay = image_tag "bootcamp/calendar.svg" April - June 2025 = image_tag "bootcamp/part-2.png", class: 'w-[350px] -mr-32 -mt-[60px]' diff --git a/app/views/bootcamp/levels/index.html.haml b/app/views/bootcamp/levels/index.html.haml new file mode 100644 index 0000000000..304dc0052a --- /dev/null +++ b/app/views/bootcamp/levels/index.html.haml @@ -0,0 +1,13 @@ +#page-bootcamp-levels + .lg-container + %h1.font-semibold.text-20.mb-8 Levels + .grid.grid-cols-3.gap-8 + - (1..27).each do |idx| + - level = @levels[idx] + - if level&.unlocked? + = link_to level, class: "block border-1 p-8 rounded-8" do + %h2.font-semibold.mb-4= level.title + -# %p= level.status + %p= level.description + - else + .block.border-1.p-8.rounded-8.bg-gray-300{ class: "h-[100px]" } diff --git a/app/views/bootcamp/levels/show.html.haml b/app/views/bootcamp/levels/show.html.haml new file mode 100644 index 0000000000..9601f61043 --- /dev/null +++ b/app/views/bootcamp/levels/show.html.haml @@ -0,0 +1,43 @@ +#page-bootcamp-level + %header + .c-breadcrumbs + .lg-container.container + = link_to levels_path do + = graphical_icon 'levels' + .span Levels + .seperator / + .title + Level 1: + = @level.title + + .lg-container + %section.c-completed-bar + = image_tag 'completed-check-circle.svg', class: "check-mark-icon" + .text You've completed Level #{@level.idx} + .stat + All #{@level.exercises.count} exercises completed + + .details + %h1 + Level 1: + = @level.title + + .lg-container + .flex + .lhs.pr-40 + .content.c-prose + = raw @level.content_html + .rhs + .c-rhs-list + %h2 Concepts + %p Make sure you understand these concepts before moving on from this level. + %ul + - @level.concepts.non_apex.each do |concept| + %li= render ViewComponents::Bootcamp::ConceptWidget.new(concept) + + .c-rhs-list + %h2 Exercises + %p Complete these exercises to complete this level. + %ul + - @level.exercises.each do |exercise| + %li= render ViewComponents::Bootcamp::ExerciseWidget.new(exercise) diff --git a/app/views/bootcamp/projects/index.html.haml b/app/views/bootcamp/projects/index.html.haml new file mode 100644 index 0000000000..d922598285 --- /dev/null +++ b/app/views/bootcamp/projects/index.html.haml @@ -0,0 +1,15 @@ +#page-bootcamp-projects + %header + .c-breadcrumbs + .lg-container.container + .title Projects + + .lg-container + .title-bar + %h1.font-semibold.text-20.mb-8 Projects + %p More projects will unlock as you progress through the Bootcamp. + + .lg-container + .grid.grid-cols-3.gap-8 + - @user_projects.each do |user_project| + = render ViewComponents::Bootcamp::ProjectWidget.new(user_project.project, user_project:) diff --git a/app/views/bootcamp/projects/show.html.haml b/app/views/bootcamp/projects/show.html.haml new file mode 100644 index 0000000000..fad6c629f7 --- /dev/null +++ b/app/views/bootcamp/projects/show.html.haml @@ -0,0 +1,41 @@ +#page-bootcamp-project + %header + .c-breadcrumbs + .lg-container.container + = link_to bootcamp_projects_path do + = graphical_icon 'concepts' + .span Projects + .seperator / + + .title= @project.title + + .lg-container + .project-bar + = image_tag @project.icon_url, width: 64, height: 64 + .flex.flex-col.gap-4 + %h1= @project.title + .tags + .tag.completed Completed + + -# + - if @project.concepts.any? + .flex + - @project.concepts.each do |concept| + = link_to concept.title, concept, class: 'bubble' + + .lg-container + .flex.gap-48 + .lhs + .introduction.c-prose + = raw @project.introduction_html + + .rhs + - num_completed = @project.exercises.to_a.count { |exercise| @solutions[exercise.id]&.completed? } + - num_unlocked = @project.exercises.to_a.count(&:unlocked?) + %h2.font-semibold.text-22.mb-4 Exercises (#{num_completed} / #{num_unlocked}) + %p.text-16.leading-150.mb-12 + You have completed #{num_completed} of #{num_unlocked} unlockable exercises in this project. + New exercises will unlock as the Bootcamp progresses. + .exercises.flex.flex-col.gap-16 + - @project.exercises.each do |exercise| + = render ViewComponents::Bootcamp::ExerciseWidget.new(exercise, solution: @solutions[exercise.id], user_project: @user_project) diff --git a/app/views/components/bootcamp/concept_widget.html.haml b/app/views/components/bootcamp/concept_widget.html.haml new file mode 100644 index 0000000000..bb7f0a0943 --- /dev/null +++ b/app/views/components/bootcamp/concept_widget.html.haml @@ -0,0 +1,3 @@ += link_to concept, class: "c-concept-widget" do + .title= concept.title + .description= concept.description diff --git a/app/views/components/bootcamp/exercise_widget.html.haml b/app/views/components/bootcamp/exercise_widget.html.haml new file mode 100644 index 0000000000..42fa89de10 --- /dev/null +++ b/app/views/components/bootcamp/exercise_widget.html.haml @@ -0,0 +1,13 @@ +- tag_type = status == :locked ? :div : :a += content_tag tag_type, href: bootcamp_project_exercise_url(project, exercise), class: "c-exercise-widget #{status}" do + .flex.items-start + = image_tag exercise.icon_url + .flex-grow.flex.flex-col + .flex.items-start + .title + .project-title= project.title + .tag{ class: status.to_s } + .exercise-title + #{exercise.idx}. + = exercise.title + .description= exercise.description diff --git a/app/views/components/bootcamp/project_widget.html.haml b/app/views/components/bootcamp/project_widget.html.haml new file mode 100644 index 0000000000..4ab1bbfe77 --- /dev/null +++ b/app/views/components/bootcamp/project_widget.html.haml @@ -0,0 +1,8 @@ += link_to project, class: "c-project-widget #{status}" do + .flex.items-start + = image_tag project.icon_url + .flex.flex-col.flex-grow + .flex.items-start + .title= project.title + .tag{ class: status.to_s } + .description= project.description diff --git a/app/views/layouts/bootcamp-ui.haml b/app/views/layouts/bootcamp-ui.haml new file mode 100644 index 0000000000..202588d1a8 --- /dev/null +++ b/app/views/layouts/bootcamp-ui.haml @@ -0,0 +1,42 @@ +!!! +%html + %head + -# Fallback fonts first + %link{ rel: "preload", href: asset_path('poppins-v20-latin-regular.woff2'), as: "font", type: "font/woff2", crossorigin: :anonymous } + %link{ rel: "preload", href: asset_path('poppins-v20-latin-600.woff2'), as: "font", type: "font/woff2", crossorigin: :anonymous } + + -# Then the main stylesheet + = stylesheet_link_tag "bootcamp-ui", "data-turbo-track": "reload" + + -# Then other critical fonts + %link{ rel: "preload", href: asset_path('poppins-v20-latin-500.woff2'), as: "font", type: "font/woff2", crossorigin: :anonymous } + %link{ rel: "preload", href: asset_path('poppins-v20-latin-700.woff2'), as: "font", type: "font/woff2", crossorigin: :anonymous } + %link{ rel: "preload", href: asset_path('source-code-pro-v22-latin_latin-ext-regular.woff2'), as: "font", type: "font/woff2", crossorigin: :anonymous } + + %meta{ content: "text/html; charset=UTF-8", "http-equiv" => "Content-Type" } + %title= content_for(:title) || "Bootcamp" + %meta{ content: "width=device-width,initial-scale=1", name: "viewport" } + %meta{ content: "yes", name: "apple-mobile-web-app-capable" } + = csrf_meta_tags + = csp_meta_tag + = yield :head + + %meta{ name: "turbo-cache-control", content: "no-cache" } + %meta{ name: "turbo-prefetch", content: "false" } + %meta{ name: "user-id", content: current_user&.id } + + %link{ href: "/manifest.json", rel: "manifest" } + %link{ href: "/icon.png", rel: "icon", type: "image/png" } + %link{ href: "/icon.svg", rel: "icon", type: "image/svg+xml" } + %link{ href: "/icon.png", rel: "apple-touch-icon" } + = javascript_include_tag "application", "data-turbo-track": "reload", type: "module", crossorigin: :anonymous + + %body{ class: body_class } + %header.c-site-header + .lg-container + .container + %img{ src: "https://assets.exercism.org/assets/bootcamp/exercism-face-light-2fc4ffad44f295d2e900ab2d2198d2280128dfcd.svg" } + .content + %strong.font-semibold Exercism + Bootcamp + = yield diff --git a/bootcamp_content/concepts/arrays.md b/bootcamp_content/concepts/arrays.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bootcamp_content/concepts/conditionals.md b/bootcamp_content/concepts/conditionals.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bootcamp_content/concepts/config.json b/bootcamp_content/concepts/config.json new file mode 100644 index 0000000000..b4467ce259 --- /dev/null +++ b/bootcamp_content/concepts/config.json @@ -0,0 +1,63 @@ +[ + { + "slug": "data-types", + "title": "Data Types", + "description": "Data types are a fundamental concept in programming. They are used to represent different types of data.", + "level": 1, + "apex": true + }, + { + "slug": "strings", + "parent": "data-types", + "title": "Strings", + "description": "Strings are a fundamental concept in programming. They are used to represent text, words, and characters.", + "level": 1, + "apex": true + }, + { + "slug": "strings-using", + "parent": "strings", + "title": "Using Strings", + "description": "Learn how to use strings in your code.", + "level": 1 + }, + { + "slug": "strings-concatenation", + "parent": "strings", + "title": "Concatenating Strings", + "description": "", + "level": 2 + }, + { + "slug": "functions", + "title": "Functions", + "description": "", + "level": 2, + "apex": true + }, + { + "slug": "functions-using", + "parent": "functions", + "title": "Using Functions", + "description": "Learn how to use basic functions.", + "level": 1 + }, + { + "slug": "conditionals", + "title": "Conditionals", + "description": "", + "level": 2 + }, + { + "slug": "loops-repeat", + "title": "Repeat Loop", + "description": "", + "level": 3 + }, + { + "slug": "arrays", + "title": "Arrays", + "description": "", + "level": 4 + } +] diff --git a/bootcamp_content/concepts/data-types.md b/bootcamp_content/concepts/data-types.md new file mode 100644 index 0000000000..a15f20e1ee --- /dev/null +++ b/bootcamp_content/concepts/data-types.md @@ -0,0 +1,8 @@ +# Data Types + +"Data" means the different values that we use in coding. +There are different types of data ("data types"). +The most basic are things like numbers, booleans (true/false) or strings. +And then we have data types that contain multiple different values like lists and dictionaries. + +Use the links below to build a comprehensive understanding of lots of different data types. diff --git a/bootcamp_content/concepts/functions-using.md b/bootcamp_content/concepts/functions-using.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bootcamp_content/concepts/functions.md b/bootcamp_content/concepts/functions.md new file mode 100644 index 0000000000..ac78031d1b --- /dev/null +++ b/bootcamp_content/concepts/functions.md @@ -0,0 +1,5 @@ +# Functions + +Functions are very important. + +Use the links below to build a comprehensive understanding of how they work. diff --git a/bootcamp_content/concepts/loops-repeat.md b/bootcamp_content/concepts/loops-repeat.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bootcamp_content/concepts/strings-concatenation.md b/bootcamp_content/concepts/strings-concatenation.md new file mode 100644 index 0000000000..83ca8fa1ab --- /dev/null +++ b/bootcamp_content/concepts/strings-concatenation.md @@ -0,0 +1,113 @@ +# Let’s Look at How We Can Join Strings Using Functions, Methods, and Operators + +Now that you know what strings are, let’s take it up a notch and explore how you can **combine strings**—a process often called **string concatenation**. It’s like putting puzzle pieces together to create a bigger picture, and there are plenty of ways to do it in programming. + +Ready? Let’s dive into the tools and techniques! + +--- + +## 1. **Joining Strings with Operators** + +The simplest and most common way to join strings is by using an **operator**—specifically, the **`+` operator**. Think of it as gluing two or more strings together. + +### Example: + +```python +greeting = "Hello, " +name = "Alex" +message = greeting + name +print(message) # Output: Hello, Alex +``` + +Here, the + operator combines "Hello, " with "Alex" to form a single string: "Hello, Alex". + +Why Use It? + +• It’s straightforward and intuitive. +• Great for small-scale operations. + +But keep in mind: most programming languages don’t automatically add spaces between strings. So if you need a space, include it yourself, like in "Hello, ". + +## 2. Using String Methods + +Strings come with built-in methods (kind of like tools), and one of the most useful for joining strings is .join(). + +### Example: + +```python +words = ["Learning", "to", "join", "strings", "is", "fun!"] +sentence = " ".join(words) +print(sentence) # Output: Learning to join strings is fun! +``` + +Here’s how .join() works: + +• Start with the separator (in this case, a single space: " "). +• Use .join() to combine all the strings in the list (words) with the separator between them. + +Why Use .join()? + +• Perfect for combining multiple strings in a list or array. +• Allows you to control how strings are joined (e.g., with commas, spaces, or even dashes). + +## 3. String Formatting and f-Strings + +Sometimes, you don’t just want to join strings—you want to insert variables or values into them. This is where string formatting shines. There are a few ways to do this, depending on the programming language, but let’s focus on f-strings (Python’s modern and super-convenient approach). + +### Example: + +```python +name = "Alex" +age = 25 +message = f"My name is {name} and I am {age} years old." +print(message) # Output: My name is Alex and I am 25 years old. +``` + +Here, the f before the string lets you embed variables directly inside {}. It’s quick, readable, and avoids a lot of extra concatenation work. + +Why Use It? + +• Ideal for creating strings with dynamic content. +• Clean and easy to read. + +## 4. Using Functions + +If you find yourself joining strings repeatedly in the same way, why not write a function to handle it? Functions let you encapsulate logic and reuse it whenever you need. + +### Example: + +```python +def create_greeting(first_name, last_name): + return f"Hello, {first_name} {last_name}!" + +greeting = create_greeting("Alex", "Smith") +print(greeting) # Output: Hello, Alex Smith! +``` + +By using a function, you can organize your code and make it reusable. Plus, it keeps things neat when working on larger projects. + +## 5. Combining Techniques + +You’re not limited to just one method—you can mix and match techniques depending on the situation. + +### Example: + +```python +names = ["Alice", "Bob", "Charlie"] +greeting = "Welcome, " + ", ".join(names) + "!" +print(greeting) # Output: Welcome, Alice, Bob, Charlie! +``` + +Here, we combined the + operator and .join() to create a dynamic and friendly message. + +Key Tips for Joining Strings + +• Pay attention to spaces: Strings don’t magically add spaces, so you’ll need to include them manually or use methods like .join() thoughtfully. +• Use the right tool for the job: For simple tasks, + works great. For more complex scenarios, consider .join(), formatting, or functions. +• Readability matters: Clear, easy-to-read code is always better, especially when working with others. + +## Wrapping Up + +Joining strings might seem simple, but it’s a fundamental skill that unlocks countless possibilities in programming. Whether you’re displaying a message, building a URL, or generating dynamic content, knowing how to combine strings effectively is key. + +Now it’s your turn! Try experimenting with the methods we’ve covered and see how creative you can get. Who knew strings could be so fun? diff --git a/bootcamp_content/concepts/strings-using.md b/bootcamp_content/concepts/strings-using.md new file mode 100644 index 0000000000..64c4a116be --- /dev/null +++ b/bootcamp_content/concepts/strings-using.md @@ -0,0 +1,46 @@ +# Introduction to Strings + +Let’s talk about one of the most fundamental concepts in programming: **strings**. And no, we’re not talking about the strings on a guitar or a piece of thread! In the world of coding, strings are all about text—words, sentences, symbols, even a single character. + +## What is a String? + +Imagine you’re writing a sentence, like _"Hello, world!"_. That entire piece of text is a string in programming. Essentially, a string is a sequence of characters grouped together. Characters could be letters, numbers, punctuation marks, or even spaces. + +Here’s the best part: strings are everywhere. They’re the text in a website button that says “Click me.” They’re the labels on a shopping app that show product names. They’re even the messages you send to your friends. If it’s text, it’s probably a string in disguise. + +## Strings in Everyday Life + +Think of strings as the digital equivalent of sticky notes. You can write anything on them: a name, a password, or even a silly joke. Once you’ve got a string, you can save it, modify it, and use it in all sorts of creative ways. + +For example: + +- A string might store your name: `"Alex"` +- It could hold a question: `"How are you?"` +- Or even act as a secret code: `"xyz123"` + +Strings help computers work with text just like you do, but they need clear instructions. That’s where you—the programmer—come in. + +## Fun Facts About Strings + +1. **Strings are “quoted.”** In most programming languages, strings are wrapped in quotes so the computer knows where the text begins and ends. For example: + + - `"I love coding!"` (double quotes) + - `'Single quotes work too!'` + +2. **Strings can be long or short.** A string could be one letter, like `"A"`, or an entire book’s worth of text! + +3. **You can manipulate strings.** Want to shout your message? You can convert `"hello"` to `"HELLO"`. Need to count how many letters are in a word? Strings can help with that too. + +4. **They’re versatile.** Strings can include emojis, special characters, and even numbers, like `"🎉 Party starts at 7pm!"`. + +## Why Strings Matter + +Strings make programs feel alive. Imagine a calculator without any labels, or a game without dialogue—it’d be impossible to use! Strings make apps and websites readable and user-friendly. + +As a beginner in programming, working with strings is one of the first ways you’ll interact with your code. You’ll practice printing text, combining strings, and even creating fun outputs like `"Hello, [Your Name]!"`. + +## Let’s Wrap This Up + +Strings might sound simple, but they’re incredibly powerful. They’re how you give your program a voice—whether it’s to say “Welcome!” or “Error: Something went wrong.” As you dive deeper into coding, you’ll see just how versatile and essential strings really are. + +Now, go ahead and say it: _"I’m ready to learn strings!"_ diff --git a/bootcamp_content/concepts/strings.md b/bootcamp_content/concepts/strings.md new file mode 100644 index 0000000000..6403103cb6 --- /dev/null +++ b/bootcamp_content/concepts/strings.md @@ -0,0 +1,5 @@ +# Strings + +Strings are one of the most common and fundamental data types. + +Use the links below to build a comprehensive understanding of how they work. diff --git a/bootcamp_content/exploration/maze/index.html b/bootcamp_content/exploration/maze/index.html new file mode 100644 index 0000000000..dd536e4823 --- /dev/null +++ b/bootcamp_content/exploration/maze/index.html @@ -0,0 +1,15 @@ + + + + + + Maze Game + + + +
+ +
+ + + diff --git a/bootcamp_content/exploration/maze/script.js b/bootcamp_content/exploration/maze/script.js new file mode 100644 index 0000000000..c803d34c33 --- /dev/null +++ b/bootcamp_content/exploration/maze/script.js @@ -0,0 +1,164 @@ +const maze = document.getElementById('maze') + +// Maze configuration: 0 = open, 1 = blocked +let mazeLayout +let characterPosition +let direction + +function createMaze() { + maze.innerHTML = '' + maze.style.setProperty('--size', mazeLayout.length) + + for (let y = 0; y < mazeLayout.length; y++) { + for (let x = 0; x < mazeLayout[y].length; x++) { + const cell = document.createElement('div') + cell.classList.add('cell') + if (mazeLayout[y][x] === 1) { + cell.classList.add('blocked') + } + if (x === characterPosition.x && y === characterPosition.y) { + const character = document.createElement('div') + character.classList.add('character') + character.classList.add('direction-' + direction) + cell.appendChild(character) + } + maze.appendChild(cell) + } + } +} + +function moveCharacter(dx, dy) { + const newX = characterPosition.x + dx + const newY = characterPosition.y + dy + if ( + newX >= 0 && + newX < mazeLayout[0].length && + newY >= 0 && + newY < mazeLayout.length && + mazeLayout[newY][newX] === 0 + ) { + characterPosition.x = newX + characterPosition.y = newY + createMaze() + } +} + +document.addEventListener('keydown', (e) => { + switch (e.key) { + case 'ArrowUp': + moveCharacter(0, -1) + break + case 'ArrowDown': + moveCharacter(0, 1) + break + case 'ArrowLeft': + moveCharacter(-1, 0) + break + case 'ArrowRight': + moveCharacter(1, 0) + break + } +}) +function move() { + if (direction == 'up') { + moveCharacter(0, -1) + } else if (direction == 'down') { + moveCharacter(0, 1) + } else if (direction == 'right') { + moveCharacter(1, 0) + } else if (direction == 'left') { + moveCharacter(-1, 0) + } +} + +function turn_left() { + if (direction == 'up') { + direction = 'left' + } else if (direction == 'down') { + direction = 'right' + } else if (direction == 'right') { + direction = 'up' + } else if (direction == 'left') { + direction = 'down' + } + createMaze() +} + +function turn_right() { + if (direction == 'up') { + direction = 'right' + } else if (direction == 'down') { + direction = 'left' + } else if (direction == 'right') { + direction = 'down' + } else if (direction == 'left') { + direction = 'up' + } + createMaze() +} + +instructions = [ + move, + move, + turn_left, + move, + move, + turn_left, + move, + move, + turn_right, + move, +] +/*for (let i = 0; i < instructions.length; i++) { + setTimeout(instructions[i], i * 100) +} */ + +function gameLoop() { + const instruction = instructions.shift() + if (!instruction) { + return + } + instruction() + setTimeout(gameLoop, 100) +} + +function setupDefault() { + mazeLayout = [ + [0, 1, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 1, 0, 1, 0, 1, 1, 1, 0, 1], + [0, 0, 0, 1, 0, 0, 0, 0, 0, 1], + [0, 1, 1, 1, 0, 1, 1, 1, 0, 1], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0], + [1, 1, 1, 1, 0, 1, 1, 1, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 1, 1, 1, 1, 1, 1, 0, 1], + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0], + [1, 1, 1, 1, 1, 1, 0, 1, 0, 0], + ] + + characterPosition = { x: 0, y: 0 } + direction = 'down' +} + +function setupGrid(layout) { + mazeLayout = layout +} +function setupDirection(dir) { + direction = dir +} +function setupPosition(x, y) { + characterPosition = { x: x, y: y } +} + +// This is what we want to call for an exercise where we're testing +// the code runs as expected. +setupDefault() +createMaze() +gameLoop() + +// setupGrid([[0,0,0],[0,0,0],[0,0,0]]); +// setupDirection("up") +// setupPosition(1,1) + +// move() +console.log(characterPosition) diff --git a/bootcamp_content/exploration/maze/style.css b/bootcamp_content/exploration/maze/style.css new file mode 100644 index 0000000000..f0ab60ce46 --- /dev/null +++ b/bootcamp_content/exploration/maze/style.css @@ -0,0 +1,70 @@ +body { + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #f4f4f4; + margin: 0; + + --cellWidth: 20px; +} + +#maze { + display: grid; + grid-template-columns: repeat(var(--size), var(--cellWidth)); + grid-template-rows: repeat(var(--size), var(--cellWidth)); + gap: 0px; +} + +.cell { + width: var(--cellWidth); + height: var(--cellWidth); + background-color: white; + border: 0.5px solid #000; +} + +.cell.blocked { + background-color: red; +} + +.character { + width: calc(var(--cellWidth) / 2); + height: calc(var(--cellWidth) / 2); + background-color: lightblue; + border: 1px solid green; + border-radius: 50%; + position: relative; + left: calc(var(--cellWidth) / 5); + top: calc(var(--cellWidth) / 5); +} +.direction-up { + transform: rotate(0deg); +} +.direction-right { + transform: rotate(-90deg); +} +.direction-down { + transform: rotate(180deg); +} +.direction-right { + transform: rotate(90deg); +} + +.character::before, +.character::after { + content: ""; + position: absolute; + width: calc(var(--cellWidth) / 4); + height: calc(var(--cellWidth) / 4); + background-color: green; + border-radius: 50%; + bottom: 8px; +} + +.character::before { + left: 6px; +} + +.character::after { + right: 6px; +} diff --git a/bootcamp_content/levels/1.md b/bootcamp_content/levels/1.md new file mode 100644 index 0000000000..6969ca68ef --- /dev/null +++ b/bootcamp_content/levels/1.md @@ -0,0 +1,34 @@ +# Level 1 + +## About Levels + +Welcome to Level One! + +Levels are the core of your learning experience on this Bootcamp. + +Each week we'll unlock a new level, with new concepts to learn and exercises to solve. Our teaching sessions appear here for you to watch live, and then stay for you to watch back on demand. + +I strongly recommend finishing all of the exercises on a level before moving onto the next one. +However, if you get really stuck on one exercise, you might still like to continue on in the next level while waiting for help. +If you feel like a level is too easy, then it shouldn't take you any time at all to solve the exercises within it, so use that for practice anyway. + +### How to Complete a Level + +To complete a level, you need to solve all the exercises on the right hand side. + +## Your first steps + +This week largely revolves around drawing using code. +The objective is for you to be able to draw fun things without feeling like you've having to think too hard about getting the right syntax (ie what to write where). +Your drawing ability should be what limits you - not your coding ability! + +We have students on this Bootcamp with a wide range of experience-levels, from total beginners to people in full-time dev jobs. + +For those just starting out, this first week will contain lots of new information and thinking for you to absorb. +The most important thing is to take your time and build confidence. + +For those who are experienced, these first few weeks will feel familiar and probably quite easy. +But I strongly advise you to still watch the videos and explore the mental models I'm building, as they will be different from the way you've approached things before. + +Most of all, have fun! +And we'll dig into some more interesting things at Level 2! diff --git a/bootcamp_content/levels/2.md b/bootcamp_content/levels/2.md new file mode 100644 index 0000000000..6a13d568e1 --- /dev/null +++ b/bootcamp_content/levels/2.md @@ -0,0 +1,7 @@ +# Level 2 + +Welcome to Level 2! + +Last week we touched on the absolute basics of coding - using functions. Hopefully you had lots of fun testing your drawing abilities, and getting creative. + +In Level 2, we're going to build on what we learned last week, and look at when code moves beyond a linear list of commands, exploring loops, conditionals, variables, and writing our own functions. This is the most full content-rich week of the whole Bootcamp, and we'll cover quite a lot of ground, so take it slowly and make sure you understand each part thoroughly. diff --git a/bootcamp_content/levels/3.md b/bootcamp_content/levels/3.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bootcamp_content/levels/4.md b/bootcamp_content/levels/4.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bootcamp_content/levels/config.json b/bootcamp_content/levels/config.json new file mode 100644 index 0000000000..32912b63a9 --- /dev/null +++ b/bootcamp_content/levels/config.json @@ -0,0 +1,18 @@ +[ + { + "title": "Writing your first code", + "description": "Learn how to write your first lines of code" + }, + { + "title": "Conditionals and Returns", + "description": "" + }, + { + "title": "Loops", + "description": "" + }, + { + "title": "Arrays", + "description": "" + } +] diff --git a/bootcamp_content/projects/drawing/config.json b/bootcamp_content/projects/drawing/config.json new file mode 100644 index 0000000000..cd1f5b5254 --- /dev/null +++ b/bootcamp_content/projects/drawing/config.json @@ -0,0 +1,6 @@ +{ + "slug": "drawing", + "title": "Drawing", + "description": "The world of drawing", + "exercises": ["loops"] +} diff --git a/bootcamp_content/projects/drawing/exercises/loops/config.json b/bootcamp_content/projects/drawing/exercises/loops/config.json new file mode 100644 index 0000000000..7e8180e10b --- /dev/null +++ b/bootcamp_content/projects/drawing/exercises/loops/config.json @@ -0,0 +1,49 @@ +{ + "title": "Loops", + "description": "Create 5 rectangles", + "project_type": "draw", + "level": 3, + "concepts": ["loops-repeat"], + "tests_type": "state", + "tasks": [ + { + "name": "Draw 4 rectangles", + "tests": [ + { + "slug": "4-rectangles-20-20", + "name": "Draw 4 rectangles", + "function": "main", + "checks": [ + { + "name": "numElements()", + "value": 4, + "descriptionHtml": "Expected 4 rectangles to be drawn, but only got %actual%." + }, + { + "name": "getRectAt(20,20,20,20)", + "matcher": "toExist", + "descriptionHtml": "No rectangle at (20,20,20,20)" + } + ] + }, + { + "slug": "4-rectangles-40-40", + "name": "Draw 4 rectangles", + "description": "Draw 4 rectangles at (40,40,20,20)", + "function": "main", + "checks": [ + { + "name": "numElements()", + "value": 4 + }, + { + "name": "getRectAt(40,40,20,20)", + "matcher": "toExist", + "descriptionHtml": "We couldn't find a rectangle at (40,40,20,20). Check that you've got the co-ordinates, width and height all correct and try again!" + } + ] + } + ] + } + ] +} diff --git a/bootcamp_content/projects/drawing/exercises/loops/example.jk b/bootcamp_content/projects/drawing/exercises/loops/example.jk new file mode 100644 index 0000000000..802eb8f278 --- /dev/null +++ b/bootcamp_content/projects/drawing/exercises/loops/example.jk @@ -0,0 +1,7 @@ +function two_fer with name do + if name is "" do + return "One for you, one for me." + else do + return "One for " + name + ", one for me." + end +end diff --git a/bootcamp_content/projects/drawing/exercises/loops/introduction.md b/bootcamp_content/projects/drawing/exercises/loops/introduction.md new file mode 100644 index 0000000000..a8c9ace4f3 --- /dev/null +++ b/bootcamp_content/projects/drawing/exercises/loops/introduction.md @@ -0,0 +1,15 @@ +# TwoFer Part 1 + +Two Fer is a classic Exercism exercise. +Through it, we'll explore a few ideas around using _Strings_ and _Conditionals_. + +In some English accents, when you say "two for" quickly, it sounds like "two fer". Two-for-one is a way of saying that if you buy one, you also get one for free. So the phrase "two-fer" often implies a two-for-one offer. + +Imagine a bakery that has a holiday offer where you can buy two cookies for the price of one ("two-fer one!"). You take the offer and (very generously) decide to give the extra cookie to someone else in the queue. + +As you give them the cookie, you one of two things. + +- If you know their name, you say: "One for <name>, one for me." +- If you don't know their name, you say: "One for you, one for me." + +For example, you might say "One for Jeremy, one for me" if you know Jeremy's name. diff --git a/bootcamp_content/projects/drawing/exercises/loops/stub.jk b/bootcamp_content/projects/drawing/exercises/loops/stub.jk new file mode 100644 index 0000000000..20a0e40b8a --- /dev/null +++ b/bootcamp_content/projects/drawing/exercises/loops/stub.jk @@ -0,0 +1,4 @@ +rect(rand(0,10),10,10,10) +rect(rand(0,80),10,10,10) +rect(rand(0,80),10,10,10) +rect(rand(0,80),10,10,10) \ No newline at end of file diff --git a/bootcamp_content/projects/drawing/exercises/loops/task-1.md b/bootcamp_content/projects/drawing/exercises/loops/task-1.md new file mode 100644 index 0000000000..1b03934503 --- /dev/null +++ b/bootcamp_content/projects/drawing/exercises/loops/task-1.md @@ -0,0 +1,5 @@ +We've given you a function skeleton that takes one input - `name`. + +It will either be an empty string (`""`) or it will be someone's name (`"Jeremy"`). + +Let's start off by just considering that empty version and always returning our default version `"One for me, one for you."`. diff --git a/bootcamp_content/projects/drawing/exercises/loops/task-2.md b/bootcamp_content/projects/drawing/exercises/loops/task-2.md new file mode 100644 index 0000000000..2a597efd6a --- /dev/null +++ b/bootcamp_content/projects/drawing/exercises/loops/task-2.md @@ -0,0 +1,7 @@ +Nice work! + +Now we need to handle the situation where we **do** know the person's name. + +Sometime's the name will be empty (`""`) in which case we want to continue returning `"One for you, one for me."`, but other times `name` will contain a name, in which case we want to include it in the return value (e.g. `"One for Jeremy, one for me."`). + +Remember, you can join multiple strings together using the `join_strings(...)` function. diff --git a/bootcamp_content/projects/drawing/introduction.md b/bootcamp_content/projects/drawing/introduction.md new file mode 100644 index 0000000000..f3cf6682e4 --- /dev/null +++ b/bootcamp_content/projects/drawing/introduction.md @@ -0,0 +1,25 @@ +# Two Fer + +## Overview + +Two Fer is a classic Exercism exercise. +Through it, we'll explore a few ideas around using _Strings_ and _Conditionals_. + +## Introduction + +In some English accents, when you say "two for" quickly, it sounds like "two fer". Two-for-one is a way of saying that if you buy one, you also get one for free. So the phrase "two-fer" often implies a two-for-one offer. + +Imagine a bakery that has a holiday offer where you can buy two cookies for the price of one ("two-fer one!"). You take the offer and (very generously) decide to give the extra cookie to someone else in the queue. + +As you give them the cookie, if you know their name (e.g. they're called "Jeremy"), you say: + +```text +"One for Jeremy, one for me." +``` + +If you don't know their name (even more generous of you!), you say: +"One for you, one for me." + +``` + +``` diff --git a/bootcamp_content/projects/drawing/tree.jiki b/bootcamp_content/projects/drawing/tree.jiki new file mode 100644 index 0000000000..342ca5fe90 --- /dev/null +++ b/bootcamp_content/projects/drawing/tree.jiki @@ -0,0 +1,14 @@ + +change_fill_color("#aa95aa") +rect(13,28,13,50) +change_fill_color("#33ff33") +change_pen_color("#33ff33") +circle(4,5,8) +circle(17,5,8) +circle(10,10,10) +circle(19,19,8) +circle(4,16,8) + +change_pen_color("#885588") +change_fill_color("#885588") +circle(15.5,40,3.8) \ No newline at end of file diff --git a/bootcamp_content/projects/maze/config.json b/bootcamp_content/projects/maze/config.json new file mode 100644 index 0000000000..28339524da --- /dev/null +++ b/bootcamp_content/projects/maze/config.json @@ -0,0 +1,6 @@ +{ + "slug": "maze", + "title": "Maze", + "description": "Use then implement a basic maze", + "exercises": ["manual-solve", "automated-solve"] +} diff --git a/bootcamp_content/projects/maze/exercises/automated-solve/config.json b/bootcamp_content/projects/maze/exercises/automated-solve/config.json new file mode 100644 index 0000000000..b3c595d41a --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/automated-solve/config.json @@ -0,0 +1,216 @@ +{ + "title": "Programatically solve a maze", + "description": "Programatically solve a maze", + "level": 2, + "concepts": ["Conditionals", "loops-repeat"], + "project_type": "maze", + "tests_type": "state", + "avaliableFunctions": ["move", "turnLeft", "turnRight", "canMove"], + "tasks": [ + { + "name": "A straight path", + "tests": [ + { + "slug": "maze-1", + "name": "Guide person to the end of the maze", + "setupFunctions": [ + [ + "setupGrid", + [ + [ + [1, 1, 1, 1, 2, 1, 1], + [1, 1, 1, 1, 0, 1, 1], + [1, 1, 1, 1, 0, 1, 1], + [1, 1, 1, 1, 0, 1, 1], + [1, 1, 1, 1, 0, 1, 1], + [1, 1, 1, 1, 0, 1, 1], + [1, 1, 1, 1, 3, 1, 1] + ] + ] + ], + ["setupDirection", ["down"]], + ["setupPosition", [4, 0]] + ], + "checks": [ + { + "name": "position", + "value": [4, 8] + } + ] + } + ] + }, + { + "name": "Turn left if you can't move straight", + "tests": [ + { + "slug": "left-turn", + "name": "A single left turn", + "setupFunctions": [ + [ + "setupGrid", + [ + [ + [2, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 0, 0, 0, 0, 0, 0, 0, 3], + [1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1] + ] + ] + ], + ["setupDirection", ["down"]], + ["setupPosition", [0, 1]] + ], + "checks": [ + { + "name": "position", + "value": [8, 5] + }, + { + "name": "direction", + "value": "right" + } + ] + } + ] + }, + { + "name": "Turn right if you can't move straight or left", + "tests": [ + { + "slug": "right-turn", + "name": "A single right turn", + "setupFunctions": [ + [ + "setupGrid", + [ + [ + [1, 1, 1, 1, 1, 1, 1, 1, 2], + [1, 1, 1, 1, 1, 1, 1, 1, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 0], + [3, 0, 0, 0, 0, 0, 0, 0, 0], + [1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1] + ] + ] + ], + ["setupDirection", ["down"]], + ["setupPosition", [8, 0]] + ], + "checks": [ + { + "name": "position", + "value": [0, 5] + } + ] + }, + { + "slug": "forks", + "name": "Choose left if you can, otherwise choose right", + "setupFunctions": [ + [ + "setupGrid", + [ + [ + [2, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 0, 0, 0, 0, 3], + [0, 1, 1, 1, 0, 1, 1, 1, 1], + [0, 1, 1, 1, 0, 1, 1, 1, 1], + [0, 0, 0, 0, 0, 1, 1, 1, 1], + [1, 1, 1, 1, 4, 1, 1, 1, 1], + [1, 1, 1, 1, 0, 1, 1, 1, 1], + [1, 1, 1, 1, 0, 1, 1, 1, 1] + ] + ] + ], + ["setupDirection", ["down"]], + ["setupPosition", [0, 0]] + ], + "function": "solve_maze", + "checks": [ + { + "name": "position", + "value": [8, 2] + } + ] + } + ] + }, + { + "name": "Turn around if needed", + "tests": [ + { + "slug": "turn-around", + "name": "Turn around if you can't move straight, left, or right", + "setupFunctions": [ + [ + "setupGrid", + [ + [ + [1, 1, 1, 2, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 1, 1, 0, 1, 1], + [1, 1, 1, 0, 1, 1, 0, 1, 1], + [1, 1, 4, 0, 0, 0, 0, 0, 1], + [1, 1, 1, 0, 1, 1, 1, 1, 1], + [3, 0, 0, 0, 1, 1, 1, 1, 1], + [1, 1, 1, 0, 1, 1, 1, 1, 1] + ] + ] + ], + ["setupDirection", ["down"]], + ["setupPosition", [3, 0]] + ], + "function": "solve_maze", + "checks": [ + { + "name": "position", + "value": [0, 7] + } + ] + }, + { + "slug": "forks", + "name": "Choose left if you can, otherwise choose right", + "setupFunctions": [ + [ + "setupGrid", + [ + [ + [2, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 1, 1, 1, 1, 1], + [0, 1, 1, 1, 0, 0, 0, 0, 1], + [0, 1, 1, 1, 0, 1, 1, 1, 1], + [0, 1, 1, 1, 0, 1, 1, 1, 1], + [0, 0, 0, 0, 0, 1, 1, 1, 1], + [1, 1, 1, 1, 0, 1, 1, 1, 1], + [1, 1, 1, 1, 0, 1, 1, 1, 1], + [1, 1, 1, 1, 3, 1, 1, 1, 1] + ] + ] + ], + ["setupDirection", ["down"]], + ["setupPosition", [0, 0]] + ], + "function": "solve_maze", + "checks": [ + { + "name": "position", + "value": [8, 2] + } + ] + } + ] + } + ] +} diff --git a/bootcamp_content/projects/maze/exercises/automated-solve/example.jk b/bootcamp_content/projects/maze/exercises/automated-solve/example.jk new file mode 100644 index 0000000000..c22af95a40 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/automated-solve/example.jk @@ -0,0 +1,14 @@ +repeat_until_game_over do + if can_turn_left() is true do + turn_left() + move() + else if can_move() is true do + move() + else if can_turn_right() is true do + turn_right() + move() + else do + turn_left() + turn_left() + end +end \ No newline at end of file diff --git a/bootcamp_content/projects/maze/exercises/automated-solve/introduction.md b/bootcamp_content/projects/maze/exercises/automated-solve/introduction.md new file mode 100644 index 0000000000..bf45496945 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/automated-solve/introduction.md @@ -0,0 +1,11 @@ +# Solve the Maze + +Your task is to solve the following maze. + +You have three functions you can use: + +- `move()` which moves the character one step forward +- `turn_left()` turns the character left (relative to the direction they're currently facing) +- `turn_right()` turns the character right (relative to the direction they're currently facing) + +Remember to use one function per line. diff --git a/bootcamp_content/projects/maze/exercises/automated-solve/stub.jk b/bootcamp_content/projects/maze/exercises/automated-solve/stub.jk new file mode 100644 index 0000000000..27cc684a7b --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/automated-solve/stub.jk @@ -0,0 +1,6 @@ +// You can use move(), turn_left() and turn_right() +// Use the functions in the order you want your character +// to use them to solve them maze. We'll start you off by +// moving the character one step forward. + +move() \ No newline at end of file diff --git a/bootcamp_content/projects/maze/exercises/automated-solve/task-1.md b/bootcamp_content/projects/maze/exercises/automated-solve/task-1.md new file mode 100644 index 0000000000..b470c01201 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/automated-solve/task-1.md @@ -0,0 +1,8 @@ +# Task 1 + +We've started by adding a single `move()` for you, which will move the character one step forward. + +Use the "Run code" button to see how close you're getting. + +It's good practice to get into the habit of running your code reguarly. +In this exercise, we'd recommend running it after adding each new instruction, although you might like to try and challenge yourself to solve it all in one go instead! diff --git a/bootcamp_content/projects/maze/exercises/automated-solve/task-2.md b/bootcamp_content/projects/maze/exercises/automated-solve/task-2.md new file mode 100644 index 0000000000..b470c01201 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/automated-solve/task-2.md @@ -0,0 +1,8 @@ +# Task 1 + +We've started by adding a single `move()` for you, which will move the character one step forward. + +Use the "Run code" button to see how close you're getting. + +It's good practice to get into the habit of running your code reguarly. +In this exercise, we'd recommend running it after adding each new instruction, although you might like to try and challenge yourself to solve it all in one go instead! diff --git a/bootcamp_content/projects/maze/exercises/automated-solve/task-3.md b/bootcamp_content/projects/maze/exercises/automated-solve/task-3.md new file mode 100644 index 0000000000..b470c01201 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/automated-solve/task-3.md @@ -0,0 +1,8 @@ +# Task 1 + +We've started by adding a single `move()` for you, which will move the character one step forward. + +Use the "Run code" button to see how close you're getting. + +It's good practice to get into the habit of running your code reguarly. +In this exercise, we'd recommend running it after adding each new instruction, although you might like to try and challenge yourself to solve it all in one go instead! diff --git a/bootcamp_content/projects/maze/exercises/automated-solve/task-4.md b/bootcamp_content/projects/maze/exercises/automated-solve/task-4.md new file mode 100644 index 0000000000..b470c01201 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/automated-solve/task-4.md @@ -0,0 +1,8 @@ +# Task 1 + +We've started by adding a single `move()` for you, which will move the character one step forward. + +Use the "Run code" button to see how close you're getting. + +It's good practice to get into the habit of running your code reguarly. +In this exercise, we'd recommend running it after adding each new instruction, although you might like to try and challenge yourself to solve it all in one go instead! diff --git a/bootcamp_content/projects/maze/exercises/implement-move/config.json b/bootcamp_content/projects/maze/exercises/implement-move/config.json new file mode 100644 index 0000000000..1875e15b06 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/implement-move/config.json @@ -0,0 +1,124 @@ +{ + "title": "Implement move", + "description": "Implement the move function", + "project_type": "maze", + "level": 5, + "tests_type": "state", + "tasks": [ + { + "name": "Move up", + "tests": [ + { + "slug": "move-up", + "name": "Moves up", + "setupFunctions": [ + [ + "setupGrid", + [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0] + ] + ], + ["setupDirection", ["up"]], + ["setupPosition", [1, 1]] + ], + "function": "move", + "avaliableFunctions": ["moveCharacter"], + "checks": [ + { + "name": "position", + "value": [0, -1] + } + ] + } + ] + }, + { + "name": "Move down", + "tests": [ + { + "slug": "move-down", + "name": "Moves down", + "setupFunctions": [ + [ + "setupGrid", + [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0] + ] + ], + ["setupDirection", ["down"]], + ["setupPosition", [1, 1]] + ], + "function": "move", + "checks": [ + { + "name": "position", + "value": [0, 1] + } + ] + } + ] + }, + { + "name": "Move left", + "tests": [ + { + "slug": "move-left", + "name": "Moves left", + + "setupFunctions": [ + [ + "setupGrid", + [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0] + ] + ], + ["setupDirection", ["left"]], + ["setupPosition", [1, 1]] + ], + "function": "move", + "checks": [ + { + "name": "position", + "value": [-1, 0] + } + ] + } + ] + }, + { + "name": "Move right", + "tests": [ + { + "slug": "move-right", + "name": "Moves right", + + "setupFunctions": [ + [ + "setupGrid", + [ + [0, 0, 0], + [0, 0, 0], + [0, 0, 0] + ] + ], + ["setupDirection", ["left"]], + ["setupPosition", [1, 1]] + ], + "function": "move", + "checks": [ + { + "name": "position", + "value": [1, 0] + } + ] + } + ] + } + ] +} diff --git a/bootcamp_content/projects/maze/exercises/implement-move/example.jk b/bootcamp_content/projects/maze/exercises/implement-move/example.jk new file mode 100644 index 0000000000..a43e2c22f8 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/implement-move/example.jk @@ -0,0 +1,21 @@ +// You have two tools at your disposal +// - A variable called direction. It's been defined like this. +// `set direction to "down"` +// - A function called moveCharacter, that expects an x and y coordinate as its input, and moves the character accordingly. + +// Your job is to check the direction then call moveCharacter with the relative direction, so for example if you move up, you call moveCharacter(0,-1) - no change to the x, but a negative change to the y coordinate. + +function move do + if direction is "up" do + moveCharacter(0, -1) + end + else if direction is "down" do + moveCharacter(0, 1) + end + else if direction is "right" do + moveCharacter(1, 0) + end + else if direction is "left" do + moveCharacter(-1, 0) + end +end \ No newline at end of file diff --git a/bootcamp_content/projects/maze/exercises/implement-move/introduction.md b/bootcamp_content/projects/maze/exercises/implement-move/introduction.md new file mode 100644 index 0000000000..da2e8f32a2 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/implement-move/introduction.md @@ -0,0 +1,19 @@ +# Even or odd + +Let's build a function that takes a _number_ as an input and returns a _string_ specifying whether it's `"Even"` (0, 2, 4, 6, 8, etc), or `"Odd"` (1, 3, 5, 7, etc) or `"Zero"`. + +To approach this problem, think about what it is that acutally makes a number odd or even. + +
+ Totally Stuck? + A good way of working out if a number is even or odd is to check whether it has a remainder when it's divided by 2. + +You probably remember from school that a remainder is what’s left over when you divide a number but can’t divide it evenly. In other words, it’s the part of the number that doesn’t fit into equal groups. + +For example, if you divide 7 by 3, you can fit two groups of 3 into 7 (since 3 + 3 = 6), but there’s 1 left over. That leftover 1 is the remainder. And that remainder makes it an odd number. + +So to solve this exercise, you might like to use the **[remainder operator]()**. + +``` +
+``` diff --git a/bootcamp_content/projects/maze/exercises/implement-move/stub.jk b/bootcamp_content/projects/maze/exercises/implement-move/stub.jk new file mode 100644 index 0000000000..d358c9aab8 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/implement-move/stub.jk @@ -0,0 +1,5 @@ +// Receives a number as its input +// and should return "Positive", "Negative" or "Zero" +function even_or_odd with num do + +end \ No newline at end of file diff --git a/bootcamp_content/projects/maze/exercises/implement-move/task-1.md b/bootcamp_content/projects/maze/exercises/implement-move/task-1.md new file mode 100644 index 0000000000..ebd3b8b008 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/implement-move/task-1.md @@ -0,0 +1,3 @@ +# Task 1 + +Start with trying to get the `"Even"` check in place. diff --git a/bootcamp_content/projects/maze/exercises/implement-move/task-2.md b/bootcamp_content/projects/maze/exercises/implement-move/task-2.md new file mode 100644 index 0000000000..a5378b687d --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/implement-move/task-2.md @@ -0,0 +1,3 @@ +# Task 2 + +Great! Now get the `"Odd"` check in place. diff --git a/bootcamp_content/projects/maze/exercises/implement-move/task-3.md b/bootcamp_content/projects/maze/exercises/implement-move/task-3.md new file mode 100644 index 0000000000..da38a007cc --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/implement-move/task-3.md @@ -0,0 +1,3 @@ +# Task 3 + +Great! Finally, let's check that `0` is returned as `Even`. diff --git a/bootcamp_content/projects/maze/exercises/manual-solve/config.json b/bootcamp_content/projects/maze/exercises/manual-solve/config.json new file mode 100644 index 0000000000..00261c677e --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/manual-solve/config.json @@ -0,0 +1,56 @@ +{ + "title": "Manually solve a maze", + "description": "Solve a maze using some basic functions", + "project_type": "maze", + "level": 1, + "avaliableFunctions": ["move", "turnLeft", "turnRight"], + "tests_type": "state", + "concepts": ["functions-using"], + "tasks": [ + { + "name": "Guide person to the end of the maze", + "tests": [ + { + "slug": "maze-1", + "name": "Guide person to the end of the maze", + "setupFunctions": [ + [ + "setupGrid", + [ + [ + [2, 1, 0, 0, 0, 1, 0], + [0, 1, 0, 1, 0, 1, 1], + [0, 0, 0, 1, 0, 0, 0], + [0, 1, 1, 1, 0, 1, 1], + [0, 0, 1, 0, 0, 1, 0], + [1, 1, 1, 1, 0, 1, 1], + [0, 0, 0, 0, 0, 0, 3] + ] + ] + ], + ["setupDirection", ["down"]], + ["setupPosition", [0, 0]] + ], + "function": "runGame", + "checks": [ + { + "name": "position", + "value": [6, 6], + "descriptionHtml": "Your position should be 6, 6, but it's %actual% ." + }, + { + "name": "direction", + "value": "right", + "descriptionHtml": "You should be facing right, but you're facing %actual%." + }, + { + "name": "getGameResult()", + "value": "win", + "descriptionHtml": "You didn't reach the end of the maze" + } + ] + } + ] + } + ] +} diff --git a/bootcamp_content/projects/maze/exercises/manual-solve/example.jk b/bootcamp_content/projects/maze/exercises/manual-solve/example.jk new file mode 100644 index 0000000000..7e4fc86905 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/manual-solve/example.jk @@ -0,0 +1,6 @@ +move() +move() +turn_left() +move() +move() +turn_right() \ No newline at end of file diff --git a/bootcamp_content/projects/maze/exercises/manual-solve/introduction.md b/bootcamp_content/projects/maze/exercises/manual-solve/introduction.md new file mode 100644 index 0000000000..bf45496945 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/manual-solve/introduction.md @@ -0,0 +1,11 @@ +# Solve the Maze + +Your task is to solve the following maze. + +You have three functions you can use: + +- `move()` which moves the character one step forward +- `turn_left()` turns the character left (relative to the direction they're currently facing) +- `turn_right()` turns the character right (relative to the direction they're currently facing) + +Remember to use one function per line. diff --git a/bootcamp_content/projects/maze/exercises/manual-solve/stub.jk b/bootcamp_content/projects/maze/exercises/manual-solve/stub.jk new file mode 100644 index 0000000000..27cc684a7b --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/manual-solve/stub.jk @@ -0,0 +1,6 @@ +// You can use move(), turn_left() and turn_right() +// Use the functions in the order you want your character +// to use them to solve them maze. We'll start you off by +// moving the character one step forward. + +move() \ No newline at end of file diff --git a/bootcamp_content/projects/maze/exercises/manual-solve/task-1.md b/bootcamp_content/projects/maze/exercises/manual-solve/task-1.md new file mode 100644 index 0000000000..b470c01201 --- /dev/null +++ b/bootcamp_content/projects/maze/exercises/manual-solve/task-1.md @@ -0,0 +1,8 @@ +# Task 1 + +We've started by adding a single `move()` for you, which will move the character one step forward. + +Use the "Run code" button to see how close you're getting. + +It's good practice to get into the habit of running your code reguarly. +In this exercise, we'd recommend running it after adding each new instruction, although you might like to try and challenge yourself to solve it all in one go instead! diff --git a/bootcamp_content/projects/maze/introduction.md b/bootcamp_content/projects/maze/introduction.md new file mode 100644 index 0000000000..2d376d908f --- /dev/null +++ b/bootcamp_content/projects/maze/introduction.md @@ -0,0 +1,7 @@ +# Maze + +## Overview + +This project contains the first exercise you ever do, but continues all the way through into Part 2. + +Your job is to solve, and then later create a maze that your character can explore through. diff --git a/bootcamp_content/projects/number-puzzles/config.json b/bootcamp_content/projects/number-puzzles/config.json new file mode 100644 index 0000000000..f320f28958 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/config.json @@ -0,0 +1,6 @@ +{ + "slug": "number-puzzles", + "title": "Number Puzzles", + "description": "Implement the classic game", + "exercises": ["positive-negative-or-zero", "even-or-odd"] +} diff --git a/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/config.json b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/config.json new file mode 100644 index 0000000000..870caa55d7 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/config.json @@ -0,0 +1,63 @@ +{ + "title": "Even or Odd", + "description": "Determine if a number is even or odd", + "concepts": ["strings-using", "conditionals"], + "level": 2, + "tasks": [ + { + "name": "Correctly identify even numbers", + "tests": [ + { + "slug": "number-2", + "type": "io", + "name": "Number 2", + "function": "even_or_odd", + "params": [2], + "expected": "Even" + }, + { + "slug": "number-28", + "type": "io", + "name": "Number 28", + "function": "even_or_odd", + "params": [28], + "expected": "Odd" + } + ] + }, + { + "name": "Correctly identify odd numbers", + "tests": [ + { + "slug": "number-1", + "type": "io", + "name": "Number 1", + "function": "even_or_odd", + "params": [1], + "expected": "Odd" + }, + { + "slug": "number-21", + "type": "io", + "name": "Number 21", + "function": "even_or_odd", + "params": [21], + "expected": "Odd" + } + ] + }, + { + "name": "Correctly identify zero", + "tests": [ + { + "slug": "number-0", + "type": "io", + "name": "Number 0", + "function": "even_or_odd", + "params": [0], + "expected": "Even" + } + ] + } + ] +} diff --git a/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/example.jk b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/example.jk new file mode 100644 index 0000000000..f29ecc41b4 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/example.jk @@ -0,0 +1,7 @@ +function even_or_odd with num do + if num % 2 equals 0 do + return "Even" + else do + return "Odd" + end +end \ No newline at end of file diff --git a/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/introduction.md b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/introduction.md new file mode 100644 index 0000000000..da2e8f32a2 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/introduction.md @@ -0,0 +1,19 @@ +# Even or odd + +Let's build a function that takes a _number_ as an input and returns a _string_ specifying whether it's `"Even"` (0, 2, 4, 6, 8, etc), or `"Odd"` (1, 3, 5, 7, etc) or `"Zero"`. + +To approach this problem, think about what it is that acutally makes a number odd or even. + +
+ Totally Stuck? + A good way of working out if a number is even or odd is to check whether it has a remainder when it's divided by 2. + +You probably remember from school that a remainder is what’s left over when you divide a number but can’t divide it evenly. In other words, it’s the part of the number that doesn’t fit into equal groups. + +For example, if you divide 7 by 3, you can fit two groups of 3 into 7 (since 3 + 3 = 6), but there’s 1 left over. That leftover 1 is the remainder. And that remainder makes it an odd number. + +So to solve this exercise, you might like to use the **[remainder operator]()**. + +``` +
+``` diff --git a/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/stub.jk b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/stub.jk new file mode 100644 index 0000000000..d358c9aab8 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/stub.jk @@ -0,0 +1,5 @@ +// Receives a number as its input +// and should return "Positive", "Negative" or "Zero" +function even_or_odd with num do + +end \ No newline at end of file diff --git a/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-1.md b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-1.md new file mode 100644 index 0000000000..ebd3b8b008 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-1.md @@ -0,0 +1,3 @@ +# Task 1 + +Start with trying to get the `"Even"` check in place. diff --git a/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-2.md b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-2.md new file mode 100644 index 0000000000..a5378b687d --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-2.md @@ -0,0 +1,3 @@ +# Task 2 + +Great! Now get the `"Odd"` check in place. diff --git a/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-3.md b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-3.md new file mode 100644 index 0000000000..da38a007cc --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/even-or-odd/task-3.md @@ -0,0 +1,3 @@ +# Task 3 + +Great! Finally, let's check that `0` is returned as `Even`. diff --git a/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/config.json b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/config.json new file mode 100644 index 0000000000..aad53410b9 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/config.json @@ -0,0 +1,63 @@ +{ + "title": "Positive, Negative or Zero", + "description": "Determine if a number is positive, negative or zero", + "concepts": ["strings-using", "conditionals"], + "level": 2, + "tasks": [ + { + "name": "Correctly identify positive numbers", + "tests": [ + { + "slug": "number-1", + "type": "io", + "name": "Number 1", + "function": "positive_negative_or_zero", + "params": [1], + "expected": "Positive" + }, + { + "slug": "number-20", + "type": "io", + "name": "Number 20", + "function": "positive_negative_or_zero", + "params": [20], + "expected": "Positive" + } + ] + }, + { + "name": "Correctly identify negative numbers", + "tests": [ + { + "slug": "negative-1", + "type": "io", + "name": "Number -1", + "function": "positive_negative_or_zero", + "params": [-1], + "expected": "Negative" + }, + { + "slug": "negative-20", + "type": "io", + "name": "Number -20", + "function": "positive_negative_or_zero", + "params": [-20], + "expected": "Negative" + } + ] + }, + { + "name": "Correctly identify zero", + "tests": [ + { + "slug": "number-0", + "type": "io", + "name": "Number 0", + "function": "positive_negative_or_zero", + "params": [0], + "expected": "Zero" + } + ] + } + ] +} diff --git a/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/example.jk b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/example.jk new file mode 100644 index 0000000000..3772cfa091 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/example.jk @@ -0,0 +1,9 @@ +function positive_negative_or_zero with num do + if num > 0 do + return "Positive" + else if num < 0 do + return "Negative" + else do + return "Zero" + end +end \ No newline at end of file diff --git a/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/introduction.md b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/introduction.md new file mode 100644 index 0000000000..ef7a9cfb53 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/introduction.md @@ -0,0 +1,3 @@ +# Positive, Negative or Zero + +Let's build a function that takes a _number_ as an input and returns a _string_ specifying whether it's `"Positive"` (greater than zero), `"Negative"` (less than zero) or `"Zero"`. diff --git a/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/stub.jk b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/stub.jk new file mode 100644 index 0000000000..95b3f0e31c --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/stub.jk @@ -0,0 +1,5 @@ +// Receives a number as its input +// and should return "Positive", "Negative" or "Zero" +function positive_negative_or_zero with num do + +end \ No newline at end of file diff --git a/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-1.md b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-1.md new file mode 100644 index 0000000000..5e43d9039d --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-1.md @@ -0,0 +1,3 @@ +# Task 1 + +Start with trying to get the `"Positive"` check in place. diff --git a/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-2.md b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-2.md new file mode 100644 index 0000000000..3746e6a983 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-2.md @@ -0,0 +1,3 @@ +# Task 2 + +Great! Now get the `"Negative"` check in place. diff --git a/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-3.md b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-3.md new file mode 100644 index 0000000000..b93c282445 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/exercises/positive-negative-or-zero/task-3.md @@ -0,0 +1,5 @@ +# Task 3 + +Nice work! + +Finally let's get the `"Zero"` check in place. diff --git a/bootcamp_content/projects/number-puzzles/introduction.md b/bootcamp_content/projects/number-puzzles/introduction.md new file mode 100644 index 0000000000..025fa4b8a9 --- /dev/null +++ b/bootcamp_content/projects/number-puzzles/introduction.md @@ -0,0 +1,5 @@ +# Number Puzzles + +## Overview + +This project contains a series of miscellaneous puzzles related to manipulated numbers or determining things from them. diff --git a/bootcamp_content/projects/rock-paper-scissors/config.json b/bootcamp_content/projects/rock-paper-scissors/config.json new file mode 100644 index 0000000000..3915c85080 --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/config.json @@ -0,0 +1,6 @@ +{ + "slug": "rock-paper-scissors", + "title": "Rock, Paper, Scissors", + "description": "Implement the classic game", + "exercises": ["basic"] +} diff --git a/bootcamp_content/projects/rock-paper-scissors/exercises/basic/config.json b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/config.json new file mode 100644 index 0000000000..f97988c28e --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/config.json @@ -0,0 +1,104 @@ +{ + "title": "Rock Paper Scissors", + "description": "Calculate the correct result", + "concepts": ["Conditionals"], + "level": 2, + "tasks": [ + { + "name": "Player 1 chooses paper", + "tests": [ + { + "slug": "paper-vs-paper", + "type": "io", + "name": "Paper vs Paper", + "function": "who_wins", + "params": ["paper", "paper"], + "expected": "tie", + "image_slug": "rock-paper-scissors/paper-paper.png" + }, + { + "slug": "paper-vs-rock", + "type": "io", + "name": "Paper vs Rock", + "function": "who_wins", + "params": ["paper", "rock"], + "expected": "player_1", + "image_slug": "rock-paper-scissors/paper-rock.png" + }, + { + "slug": "paper-vs-scissors", + "type": "io", + "name": "Paper vs Scissors", + "function": "who_wins", + "params": ["paper", "scissors"], + "expected": "player_2", + "image_slug": "rock-paper-scissors/paper-scissors.png" + } + ] + }, + { + "name": "Player 1 chooses rock", + "tests": [ + { + "slug": "rock-vs-paper", + "type": "io", + "name": "Rock vs Paper", + "function": "who_wins", + "params": ["rock", "paper"], + "expected": "player_2", + "image_slug": "rock-paper-scissors/rock-paper.png" + }, + { + "slug": "rock-vs-rock", + "type": "io", + "name": "Rock vs Rock", + "function": "who_wins", + "params": ["rock", "rock"], + "expected": "tie", + "image_slug": "rock-paper-scissors/rock-rock.png" + }, + { + "slug": "rock-vs-scissors", + "type": "io", + "name": "Rock vs Scissors", + "function": "who_wins", + "params": ["rock", "scissors"], + "expected": "player_1", + "image_slug": "rock-paper-scissors/rock-scissors.png" + } + ] + }, + { + "name": "Player 1 chooses scissors", + "tests": [ + { + "slug": "scissors-vs-paper", + "type": "io", + "name": "Scissors vs Paper", + "function": "who_wins", + "params": ["scissors", "paper"], + "expected": "player_1", + "image_slug": "rock-paper-scissors/scissors-paper.png" + }, + { + "slug": "scissors-vs-rock", + "type": "io", + "name": "Scissors vs Rock", + "function": "who_wins", + "params": ["scissors", "rock"], + "expected": "player_2", + "image_slug": "rock-paper-scissors/scissors-rock.png" + }, + { + "slug": "scissors-vs-scissors", + "type": "io", + "name": "Scissors vs Scissors", + "function": "who_wins", + "params": ["scissors", "scissors"], + "expected": "tie", + "image_slug": "rock-paper-scissors/scissors-scissors.png" + } + ] + } + ] +} diff --git a/bootcamp_content/projects/rock-paper-scissors/exercises/basic/example.jk b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/example.jk new file mode 100644 index 0000000000..2c0ef84106 --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/example.jk @@ -0,0 +1,27 @@ +function who_wins with player_1_choice, player_2_choice do + if player_1_choice is "rock" do + if player_2_choice is "rock" do + return "tie" + else if player_2_choice is "paper" do + return "player_2" + else do + return "player_1" + end + else if player_1_choice is "paper" do + if player_2_choice is "rock" do + return "player_1" + else if player_2_choice is "paper" do + return "tie" + else do + return "player_2" + end + else do + if player_2_choice is "rock" do + return "player_2" + else if player_2_choice is "paper" do + return "player_1" + else do + return "tie" + end + end +end \ No newline at end of file diff --git a/bootcamp_content/projects/rock-paper-scissors/exercises/basic/introduction.md b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/introduction.md new file mode 100644 index 0000000000..a531c32416 --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/introduction.md @@ -0,0 +1,11 @@ +# Part 1 + +We're going to start off by determining who wins a game of rock-paper-scissors by creating the function `who_wins`. + +The function takes two inputs - `player_1_choice` and `player_2_choice`, which can be `"rock"`, `"paper"` or `"scissors"`. + +Your job is to return the winner (`"player_1"`, `"player_2"`, or `"tie`") based on the following rules: + +- Paper beats Rock +- Rock beats Scissors +- Scissors beat Paper diff --git a/bootcamp_content/projects/rock-paper-scissors/exercises/basic/stub.jk b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/stub.jk new file mode 100644 index 0000000000..cdfb9a2dac --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/stub.jk @@ -0,0 +1,5 @@ +// The choices can be one of "rock", "paper" or "scissors" +// Should return "player_1", "player_2" or "tie" +function who_wins with player_1_choice, player_2_choice do + +end \ No newline at end of file diff --git a/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-1.md b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-1.md new file mode 100644 index 0000000000..830e498063 --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-1.md @@ -0,0 +1,9 @@ +# Task 1 + +There are a few different ways to approach this exercise, but let's solve it by breaking it down based on player 1's choice. + +To start with, return the correct value based on when player 1 choices "paper": + +- If player 2 also chooses paper, we should return `"tie"` +- If player 2 chooses "rock", then the paper smoothers the rock so player 1 wins (return `"player_1"`) +- If player 2 chooses "scissors", then the rock blunts the scissors so player 2 wins (return `"player_2"`) diff --git a/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-2.md b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-2.md new file mode 100644 index 0000000000..cfa6f86026 --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-2.md @@ -0,0 +1,7 @@ +# Task 2 + +Great, now let's consider what happens if player 1 chooses "rock': + +- If player 2 also chooses rock, we should return `"tie"` +- If player 2 chooses "paper", then the paper smoothers the rock so player 2 wins (return `"player_2"`) +- If player 2 chooses "scissors", then the rock blunts the scissors so player 1 wins (return `"player_1"`) diff --git a/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-3.md b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-3.md new file mode 100644 index 0000000000..0ffe0edf7e --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/exercises/basic/task-3.md @@ -0,0 +1,5 @@ +# Task 3 + +Nice work. So we're two-thirds of the way there. The final situation is if player 1 chooses scissors. + +This time, we'll leave the logic for you to work out! diff --git a/bootcamp_content/projects/rock-paper-scissors/introduction.md b/bootcamp_content/projects/rock-paper-scissors/introduction.md new file mode 100644 index 0000000000..7abf4796cc --- /dev/null +++ b/bootcamp_content/projects/rock-paper-scissors/introduction.md @@ -0,0 +1,21 @@ +# Rock Paper Scissors + +## Overview + +Rock Paper Scissors is a class game played around the world by people of all ages. + +We're going to build out this whole game, starting by implementing the logic of who wins using _Conditionals_, adding a way of keeping score using _Variables_, and eventually building out all the visuals in Part 2 of the course. + +## Introduction + +Rock, Paper, Scissors is one of those games everyone seems to know. It’s quick, simple, and surprisingly fun for how basic it is. Whether you’re trying to decide who gets the last slice of pizza or just passing time with a friend, this game has a way of making even small decisions feel epic. The best part? You don’t need any equipment—just your hands and a little competitive spirit. + +The rules are simple. + +Both players choose one of three options: Rock, Paper, or Scissors. Choices are revealed simultaneously and the winner is determined based on these rules: +• Rock beats Scissors (Rock crushes Scissors). +• Scissors beats Paper (Scissors cut Paper). +• Paper beats Rock (Paper covers Rock). +If both players choose the same option, it’s a tie, and the round is replayed (optional based on how you’re playing). + +You and your opponent pick one of three options—Rock, Paper, or Scissors—and reveal your choices at the same time. Rock beats Scissors (because it crushes it), Scissors beats Paper (because it cuts it), and Paper beats Rock (because it covers it). If you both pick the same thing, it’s a tie, and you go again. You can play a single round to settle something quickly or go best out of three for a proper showdown. It’s easy to learn, impossible to master, and always a good time. diff --git a/bootcamp_content/projects/two-fer/config.json b/bootcamp_content/projects/two-fer/config.json new file mode 100644 index 0000000000..0e383e2435 --- /dev/null +++ b/bootcamp_content/projects/two-fer/config.json @@ -0,0 +1,6 @@ +{ + "slug": "two-fer", + "title": "TwoFer", + "description": "Cookies, strings, conditionals", + "exercises": ["basic"] +} diff --git a/bootcamp_content/projects/two-fer/exercises/basic/config.json b/bootcamp_content/projects/two-fer/exercises/basic/config.json new file mode 100644 index 0000000000..cc539ce27b --- /dev/null +++ b/bootcamp_content/projects/two-fer/exercises/basic/config.json @@ -0,0 +1,46 @@ +{ + "title": "Empty Strings", + "description": "Return what you say when you hand the cookie other, using the person's name if you know it.", + "concepts": ["strings-concatenation", "conditionals"], + "level": 2, + "testsType": "io", + "readonly_ranges": [ + { "from": 1, "to": 1 }, + { "from": 3, "to": 3 } + ], + "tasks": [ + { + "name": "Get things working with a single string", + "tests": [ + { + "slug": "no_name", + "name": "no name given", + "function": "two_fer", + "params": [""], + "expected": "One for you, one for me." + } + ] + }, + { + "name": "Get things working with a name", + "tests": [ + { + "type": "io", + "slug": "alice", + "name": "A name is given", + "function": "two_fer", + "params": ["Alice"], + "expected": "One for Alice, one for me." + }, + { + "type": "io", + "slug": "bob", + "name": "Another name is given", + "function": "two_fer", + "params": ["Bob"], + "expected": "One for Bob, one for me." + } + ] + } + ] +} diff --git a/bootcamp_content/projects/two-fer/exercises/basic/example.jk b/bootcamp_content/projects/two-fer/exercises/basic/example.jk new file mode 100644 index 0000000000..802eb8f278 --- /dev/null +++ b/bootcamp_content/projects/two-fer/exercises/basic/example.jk @@ -0,0 +1,7 @@ +function two_fer with name do + if name is "" do + return "One for you, one for me." + else do + return "One for " + name + ", one for me." + end +end diff --git a/bootcamp_content/projects/two-fer/exercises/basic/introduction.md b/bootcamp_content/projects/two-fer/exercises/basic/introduction.md new file mode 100644 index 0000000000..c8048e8dea --- /dev/null +++ b/bootcamp_content/projects/two-fer/exercises/basic/introduction.md @@ -0,0 +1,15 @@ +# TwoFer Part 1 + +Two Fer is a classic Exercism exercise. +Through it, we'll explore a few ideas around using _Strings_ and _Conditionals_. + +In some English accents, when you say "two for" quickly, it sounds like "two fer". Two-for-one is a way of saying that if you buy one, you also get one for free. So the phrase "two-fer" often implies a two-for-one offer. + +Imagine a bakery that has a holiday offer where you can buy two cookies for the price of one ("two-fer one!"). You take the offer and (very generously) decide to give the extra cookie to someone else in the queue. + +As you give them the cookie, you one of two things. + +- If you know their name, you say: "One for , one for me." +- If you don't know their name, you say: "One for you, one for me." + +For example, you might say "One for Jeremy, one for me" if you know Jeremy's name. diff --git a/bootcamp_content/projects/two-fer/exercises/basic/stub.jk b/bootcamp_content/projects/two-fer/exercises/basic/stub.jk new file mode 100644 index 0000000000..e871b02348 --- /dev/null +++ b/bootcamp_content/projects/two-fer/exercises/basic/stub.jk @@ -0,0 +1,3 @@ +function two_fer with name do + +end diff --git a/bootcamp_content/projects/two-fer/exercises/basic/task-1.md b/bootcamp_content/projects/two-fer/exercises/basic/task-1.md new file mode 100644 index 0000000000..1b03934503 --- /dev/null +++ b/bootcamp_content/projects/two-fer/exercises/basic/task-1.md @@ -0,0 +1,5 @@ +We've given you a function skeleton that takes one input - `name`. + +It will either be an empty string (`""`) or it will be someone's name (`"Jeremy"`). + +Let's start off by just considering that empty version and always returning our default version `"One for me, one for you."`. diff --git a/bootcamp_content/projects/two-fer/exercises/basic/task-2.md b/bootcamp_content/projects/two-fer/exercises/basic/task-2.md new file mode 100644 index 0000000000..2a597efd6a --- /dev/null +++ b/bootcamp_content/projects/two-fer/exercises/basic/task-2.md @@ -0,0 +1,7 @@ +Nice work! + +Now we need to handle the situation where we **do** know the person's name. + +Sometime's the name will be empty (`""`) in which case we want to continue returning `"One for you, one for me."`, but other times `name` will contain a name, in which case we want to include it in the return value (e.g. `"One for Jeremy, one for me."`). + +Remember, you can join multiple strings together using the `join_strings(...)` function. diff --git a/bootcamp_content/projects/two-fer/introduction.md b/bootcamp_content/projects/two-fer/introduction.md new file mode 100644 index 0000000000..f3cf6682e4 --- /dev/null +++ b/bootcamp_content/projects/two-fer/introduction.md @@ -0,0 +1,25 @@ +# Two Fer + +## Overview + +Two Fer is a classic Exercism exercise. +Through it, we'll explore a few ideas around using _Strings_ and _Conditionals_. + +## Introduction + +In some English accents, when you say "two for" quickly, it sounds like "two fer". Two-for-one is a way of saying that if you buy one, you also get one for free. So the phrase "two-fer" often implies a two-for-one offer. + +Imagine a bakery that has a holiday offer where you can buy two cookies for the price of one ("two-fer one!"). You take the offer and (very generously) decide to give the extra cookie to someone else in the queue. + +As you give them the cookie, if you know their name (e.g. they're called "Jeremy"), you say: + +```text +"One for Jeremy, one for me." +``` + +If you don't know their name (even more generous of you!), you say: +"One for you, one for me." + +``` + +``` diff --git a/bootcamp_content/projects/wordle/config.json b/bootcamp_content/projects/wordle/config.json new file mode 100644 index 0000000000..1bbcca61f0 --- /dev/null +++ b/bootcamp_content/projects/wordle/config.json @@ -0,0 +1,6 @@ +{ + "slug": "wordle", + "title": "Wordle", + "description": "Create the modern Wordle game", + "exercises": ["process-guess"] +} diff --git a/bootcamp_content/projects/wordle/exercises/process-guess/config.json b/bootcamp_content/projects/wordle/exercises/process-guess/config.json new file mode 100644 index 0000000000..e6580377bd --- /dev/null +++ b/bootcamp_content/projects/wordle/exercises/process-guess/config.json @@ -0,0 +1,28 @@ +{ + "title": "Process a guess", + "description": "Turn a guess into a valid response", + "project_type": "wordle", + "avaliableFunctions": [], + "concepts": ["conditionals", "arrays"], + "level": 3, + "testsType": "state", + "tasks": [ + { + "name": "Deal with a correct guess", + "tests": [ + { + "slug": "all-correct", + "name": "Deal with a fully correct guess", + "function": "process_guess", + "checks": [ + { + "name": "getGuessState1()", + "value": ["present", "absent", "absent", "absent", "correct"], + "descriptionHtml": "We expected the first letter to be present and the last one to be correct" + } + ] + } + ] + } + ] +} diff --git a/bootcamp_content/projects/wordle/exercises/process-guess/example.jk b/bootcamp_content/projects/wordle/exercises/process-guess/example.jk new file mode 100644 index 0000000000..7e4fc86905 --- /dev/null +++ b/bootcamp_content/projects/wordle/exercises/process-guess/example.jk @@ -0,0 +1,6 @@ +move() +move() +turn_left() +move() +move() +turn_right() \ No newline at end of file diff --git a/bootcamp_content/projects/wordle/exercises/process-guess/introduction.md b/bootcamp_content/projects/wordle/exercises/process-guess/introduction.md new file mode 100644 index 0000000000..bf45496945 --- /dev/null +++ b/bootcamp_content/projects/wordle/exercises/process-guess/introduction.md @@ -0,0 +1,11 @@ +# Solve the Maze + +Your task is to solve the following maze. + +You have three functions you can use: + +- `move()` which moves the character one step forward +- `turn_left()` turns the character left (relative to the direction they're currently facing) +- `turn_right()` turns the character right (relative to the direction they're currently facing) + +Remember to use one function per line. diff --git a/bootcamp_content/projects/wordle/exercises/process-guess/stub.jk b/bootcamp_content/projects/wordle/exercises/process-guess/stub.jk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/bootcamp_content/projects/wordle/exercises/process-guess/task-1.md b/bootcamp_content/projects/wordle/exercises/process-guess/task-1.md new file mode 100644 index 0000000000..b470c01201 --- /dev/null +++ b/bootcamp_content/projects/wordle/exercises/process-guess/task-1.md @@ -0,0 +1,8 @@ +# Task 1 + +We've started by adding a single `move()` for you, which will move the character one step forward. + +Use the "Run code" button to see how close you're getting. + +It's good practice to get into the habit of running your code reguarly. +In this exercise, we'd recommend running it after adding each new instruction, although you might like to try and challenge yourself to solve it all in one go instead! diff --git a/bootcamp_content/projects/wordle/introduction.md b/bootcamp_content/projects/wordle/introduction.md new file mode 100644 index 0000000000..2d376d908f --- /dev/null +++ b/bootcamp_content/projects/wordle/introduction.md @@ -0,0 +1,7 @@ +# Maze + +## Overview + +This project contains the first exercise you ever do, but continues all the way through into Part 2. + +Your job is to solve, and then later create a maze that your character can explore through. diff --git a/config/routes.rb b/config/routes.rb index 4bde8de519..3006e16447 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -486,4 +486,6 @@ post "/bootcamp/stripe/create-checkout-session" => "bootcamp#stripe_create_checkout_session", as: :bootcamp_ get "/bootcamp/stripe/session-status" => "bootcamp#stripe_session_status", as: :bootcamp_stripe_session_status get "/bootcamp/confirmed" => "bootcamp#confirmed", as: :bootcamp_confirmed + + draw(:bootcamp) end diff --git a/config/routes/bootcamp.rb b/config/routes/bootcamp.rb new file mode 100644 index 0000000000..fc7182a255 --- /dev/null +++ b/config/routes/bootcamp.rb @@ -0,0 +1,24 @@ +namespace :bootcamp do + get "dashboard", to: "dashboard#index", as: :dashboard + resources "levels", param: :idx, only: %i[index show] + resources "concepts", param: :slug, only: %i[index show] + resources "projects", param: :slug, only: %i[index show] do + resources "exercises", param: :slug, only: %i[index show edit] + end + + namespace :admin do + resource :settings, only: [:show] do + post :increment_level, on: :collection + end + resources :exercises + end +end + +# namespace :api do +# resources :solutions, param: :uuid, only: [] do +# member do +# patch :complete +# end +# resources :submissions, param: :uuid, only: [:create] +# end +# end diff --git a/db/bootcamp_seeds.rb b/db/bootcamp_seeds.rb new file mode 100644 index 0000000000..5c803e420e --- /dev/null +++ b/db/bootcamp_seeds.rb @@ -0,0 +1,82 @@ +return unless Rails.env.development? + +# rubocop:disable Layout/LineLength +Bootcamp::Submission.destroy_all +Bootcamp::Solution.destroy_all +Bootcamp::Exercise.destroy_all +Bootcamp::Project.destroy_all +Bootcamp::Concept.destroy_all +Bootcamp::Level.destroy_all + +def concept_intro_for(slug) = File.read(Rails.root / "bootcamp_content/concepts/#{slug}.md") + +def project_config_for(slug) = JSON.parse(File.read(Rails.root / "bootcamp_content/projects/#{slug}/config.json"), + symbolize_names: true) + +def project_intro_for(slug) = File.read(Rails.root / "bootcamp_content/projects/#{slug}/introduction.md") + +def exercise_code_for(project_slug, + exercise_slug) = File.read(Rails.root / "bootcamp_content/projects/#{project_slug}/exercises/#{exercise_slug}/code") + +def exercise_config_for(project_slug, + exercise_slug) = JSON.parse( + File.read(Rails.root / "bootcamp_content/projects/#{project_slug}/exercises/#{exercise_slug}/config.json"), symbolize_names: true + ) + +JSON.parse(File.read(Rails.root / "bootcamp_content/levels/config.json"), symbolize_names: true).each.with_index do |details, idx| + idx += 1 + Bootcamp::Level.create!( + idx:, + title: details[:title], + description: details[:description], + content_markdown: File.read(Rails.root / "bootcamp_content/levels/#{idx}.md") + ) +end + +JSON.parse(File.read(Rails.root / "bootcamp_content/concepts/config.json"), symbolize_names: true).each do |details| + Bootcamp::Concept.create!( + slug: details[:slug], + parent: details[:parent] ? Bootcamp::Concept.find_by!(slug: details[:parent]) : nil, + title: details[:title], + description: details[:description], + content_markdown: concept_intro_for(details[:slug]), + level_idx: details[:level], + apex: details[:apex] || false + ) +end + +projects = %w[ + two-fer + rock-paper-scissors + number-puzzles + drawing + maze + wordle +] + +projects.each do |project_slug| + project_config = project_config_for(project_slug) + project = Bootcamp::Project.create!( + slug: project_slug, + title: project_config[:title], + description: project_config[:description], + introduction_markdown: project_intro_for(project_slug) + ) + project_config[:exercises].each.with_index do |exercise_slug, idx| + exercise_config = exercise_config_for(project_slug, exercise_slug) + project.exercises.create!( + slug: exercise_slug, + idx: idx + 1, + title: exercise_config[:title], + description: exercise_config[:description], + level_idx: exercise_config[:level], + concepts: exercise_config[:concepts].map do |slug| + Bootcamp::Concept.find_by!(slug:) + end + ) + end +end + +Bootcamp::UserProject::CreateAll.(User.find_by!(handle: 'iHiD')) + +# rubocop:enable Layout/LineLength diff --git a/tailwind.config.js b/tailwind.config.js index 8a47825f07..a879d218ba 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -86,6 +86,37 @@ module.exports = { navDropdown: '0px 6px 28px 4px rgba(var(--shadowColorMain), 0.5)', }, colors: { + /* REPLACE */ + 'gray-200': 'rgb(229 231 235)', + 'gray-300': 'rgb(209 213 219)', + 'gray-400': 'rgb(156 163 175)', + 'gray-600': 'rgb(209 213 219)', + 'gray-500': 'rgb(107 114 128)', + 'gray-800': 'rgb(31 41 55)', + 'gray-900': 'rgb(17 24 39)', + 'slate-400': 'rgb(148 163 184)', + 'indigo-300': 'rgb(191 204 255)', + 'blue-100': 'rgb(227 236 255)', + 'blue-400': 'rgb(59 130 246)', + 'blue-500': 'rgb(59 130 246)', + 'blue-700': 'rgb(59 130 246)', + 'red-100': 'rgb(255 236 236)', + 'red-300': 'rgb(255 236 236)', + 'red-500': 'rgb(239 68 68)', + 'red-700': 'rgb(239 68 68)', + 'red-900': 'rgb(107 10 10)', + 'green-100': 'rgb(236 253 245)', + 'green-300': 'rgb(236 253 245)', + 'green-400': 'rgb(0 230 118)', + 'green-500': 'rgb(0 230 118)', + 'green-700': 'rgb(0 128 0)', + + 'thick-border-blue': '#F4F6FF', + 'primary-blue': 'rgb(46 87 232)', + 'background-purple': '#FCF9FF', + 'thin-border-blue': '#E2E9FF', + 'jiki-purple': '#7128F5', + transparent: 'transparent', current: 'currentColor', @@ -322,6 +353,7 @@ module.exports = { auto: 'auto', arbitary: '1px', fill: '100%', + full: '100%', 32: '32px', 48: '48px', 100: '100%', @@ -382,6 +414,7 @@ module.exports = { auto: 'auto', arbitary: '1px', fill: '100%', + full: '100%', '5-7': '71.4%', '1-3': '33.3%', '1-2': '50%', @@ -404,6 +437,7 @@ module.exports = { menu: '40', dropdown: '50', tooltip: '80', + 'tooltip-content': '81', modal: '100', redirect: '150', }, From d37ee027bb2fa00a23d4ee2b02baf53dac691243 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Mon, 30 Dec 2024 18:04:45 +0000 Subject: [PATCH 05/38] WIP --- app/animations/confetti.json | 35478 ++++++++++++++++ app/animations/finish-lesson-modal-top.json | 2495 ++ .../components/solve-exercise-page.css | 2 +- app/css/bootcamp/exercises/draw.css | 2 +- .../bootcamp/solve_exercise_page.rb | 59 + .../AnimationTimeline/AnimationTimeline.ts | 159 + .../AnimationTimeline/types.ts | 32 + .../CodeMirror/CodeMirror.tsx | 228 + .../CodeMirror/extensions/clean-up-editor.ts | 15 + .../extensions/create-theme/colorScheme.d.ts | 1 + .../extensions/create-theme/colorScheme.js | 70 + .../extensions/create-theme/create-theme.d.ts | 49 + .../extensions/create-theme/create-theme.js | 43 + .../extensions/edit-editor/customCursor.ts | 76 + .../extensions/edit-editor/highlightRange.ts | 46 + .../edit-editor/processActionsSequentially.ts | 122 + .../processActionsSequentially.types.ts | 69 + .../extensions/edit-editor/utils.ts | 319 + .../end-line-information/describeError.ts | 22 + .../information-widget.ts | 184 + .../end-line-information/line-information.ts | 107 + .../CodeMirror/extensions/index.ts | 15 + .../CodeMirror/extensions/lineHighlighter.ts | 108 + .../extensions/multiLineHighlighter.ts | 103 + .../extensions/placeholder-widget.ts | 101 + .../read-only-ranges/readOnlyLineDeco.ts | 108 + .../read-only-ranges/readOnlyRanges.ts | 57 + .../readOnlyRangesExtension.ts | 138 + .../CodeMirror/extensions/underlineRange.ts | 53 + .../CodeMirror/getCodeMirrorFieldValue.ts | 10 + .../CodeMirror/hooks/index.ts | 5 + .../CodeMirror/hooks/useHighlightLine.ts | 21 + .../CodeMirror/hooks/useHighlightLineColor.ts | 21 + .../hooks/useReadonlyCompartment.ts | 20 + .../CodeMirror/hooks/useReadonlyRanges.ts | 18 + .../CodeMirror/hooks/useUnderlineRange.ts | 20 + .../CodeMirror/useEditorHandler.tsx | 56 + .../ControlButtons/CheckScenariosButton.tsx | 45 + .../ControlButtons/ControlButtons.tsx | 29 + .../Instructions/Instructions.tsx | 70 + .../PreviousTestResultsButtons.tsx | 46 + .../PreviousTestResultsView.tsx | 92 + .../InformationWidgetTiggleButton.tsx | 45 + .../SolveExercisePage/Scrubber/Scrubber.tsx | 140 + .../Scrubber/ScrubberTooltipInformation.tsx | 29 + .../SolveExercisePage/Scrubber/useScrubber.ts | 386 + .../SolveExercisePage/SolveExercisePage.tsx | 86 + .../SolveExercisePageContextWrapper.tsx | 29 + .../TaskPreview/IOPreview.tsx | 20 + .../TaskPreview/StatePreview.tsx | 14 + .../TaskPreview/TaskPreview.tsx | 32 + .../TaskPreview/useMountViewOrImage.tsx | 69 + .../SolveExercisePage/Tasks/TaskList.tsx | 36 + .../SolveExercisePage/Tasks/Tasks.tsx | 88 + .../Tasks/completeSolution.ts | 40 + .../SolveExercisePage/Tasks/launchConfetti.ts | 58 + .../SolveExercisePage/Tasks/useTasks.tsx | 67 + .../TestResultsView/CodeRun.tsx | 10 + .../TestResultsView/FailInfo.tsx | 28 + .../TestResultsView/IOTestResultView.tsx | 41 + .../InspectedTestResultView.tsx | 71 + .../TestResultsView/PassMessage.tsx | 148 + .../TestResultsView/StateTestResultView.tsx | 13 + .../TestResultsView/TestResultsButtons.tsx | 72 + .../useInspectedTestResultView.ts | 133 + .../TestResultsView/useShouldAnimate.ts | 14 + .../SolveExercisePage/exercises/Exercise.ts | 44 + .../exercises/draw/DrawExercise.tsx | 318 + .../exercises/draw/examples.md | 136 + .../SolveExercisePage/exercises/draw/index.ts | 3 + .../exercises/draw/shapes.ts | 199 + .../SolveExercisePage/exercises/draw/utils.ts | 121 + .../SolveExercisePage/exercises/draw/view.tsx | 56 + .../exercises/maze/MazeExercise.tsx | 322 + .../exercises/wordle/WordleExercise.tsx | 111 + .../getFirstFailingOrFirstTest.ts | 23 + .../hooks/useOnRunCode/submitCode.ts | 34 + .../hooks/useOnRunCode/useOnRunCode.ts | 126 + .../SolveExercisePage/hooks/useResize.tsx | 105 + .../SolveExercisePage/hooks/useSetupStores.ts | 66 + .../store/animationTimelineStore.ts | 21 + .../SolveExercisePage/store/editorStore.ts | 118 + .../store/taskStore/getInitialTasks.ts | 38 + .../taskStore/handleMarkTaskAsCompleted.ts | 25 + .../store/taskStore/processTasks.ts | 69 + .../store/taskStore/taskStore.ts | 71 + .../SolveExercisePage/store/testStore.ts | 50 + .../bootcamp/SolveExercisePage/store/types.ts | 16 + .../bootcamp/SolveExercisePage/store/utils.ts | 44 + .../SolveExercisePage/test-runner/README.md | 28 + .../SolveExercisePage/test-runner/expect.ts | 62 + .../execGenericTest.ts | 42 + .../execProjectTest.ts | 50 + .../generateAndRunTestSuite.ts | 26 + .../generateExpects.ts | 80 + .../SolveExercisePage/test-runner/index.ts | 33 + .../SolveExercisePage/tests/DrawTests.ts | 75 + .../SolveExercisePage/utils/exerciseMap.ts | 25 + .../SolveExercisePage/utils/showError.ts | 39 + .../common/ErrorBoundary/ErrorBoundary.tsx | 68 + .../ErrorBoundary/wrapWithErrorBoundary.tsx | 15 + .../bootcamp/common/LottieAnimation.tsx | 30 + .../bootcamp/common/hooks/useLogger.ts | 7 + .../FinishLessonModal/FinishLessonModal.tsx | 113 + .../FinishLessonModalContextWrapper.tsx | 29 + .../bootcamp/types/AnimationTimeline.d.ts | 6 + .../components/bootcamp/types/Matchers.d.ts | 17 + .../bootcamp/types/SolveExercisePage.d.ts | 42 + .../components/bootcamp/types/Tasks.d.ts | 34 + .../bootcamp/types/TestCallback.d.ts | 14 + .../components/bootcamp/types/TestConfig.d.ts | 5 + .../components/bootcamp/types/TestResult.d.ts | 29 + .../components/bootcamp/types/TestRunner.d.ts | 5 + .../misc/CodeMirror/languageCompartment.ts | 12 +- app/javascript/esbuild.js | 1 + app/javascript/interpreter/checks.ts | 19 + app/javascript/interpreter/environment.ts | 120 + app/javascript/interpreter/error.ts | 100 + .../interpreter/evaluation-result.ts | 196 + app/javascript/interpreter/executor.ts | 943 + app/javascript/interpreter/expression.ts | 244 + app/javascript/interpreter/frames.ts | 134 + app/javascript/interpreter/functions.ts | 60 + app/javascript/interpreter/interpreter.ts | 257 + .../interpreter/languages/javascript/error.ts | 56 + .../languages/javascript/parser.ts | 864 + .../languages/javascript/scanner.ts | 490 + .../interpreter/languages/javascript/token.ts | 77 + .../interpreter/languages/jikiscript/error.ts | 66 + .../jikiscript/helpers/complexErrors.ts | 39 + .../languages/jikiscript/helpers/isTypo.ts | 30 + .../languages/jikiscript/parser.ts | 884 + .../languages/jikiscript/scanner.ts | 507 + .../interpreter/languages/jikiscript/token.ts | 71 + .../interpreter/locales/en/translation.json | 95 + .../interpreter/locales/nl/translation.json | 84 + .../locales/system/translation.json | 93 + app/javascript/interpreter/location.ts | 54 + app/javascript/interpreter/resolver.ts | 333 + app/javascript/interpreter/statement.ts | 186 + app/javascript/interpreter/token.ts | 11 + app/javascript/interpreter/translator.ts | 33 + app/javascript/packs/bootcamp-ui.tsx | 33 + app/models/bootcamp/exercise.rb | 4 +- app/views/bootcamp/exercises/edit.html.haml | 2 +- app/views/layouts/bootcamp-ui.haml | 3 +- .../manual-solve/{stub.jk => stub.jiki} | 0 package.json | 49 +- yarn.lock | 636 +- 149 files changed, 51915 insertions(+), 244 deletions(-) create mode 100644 app/animations/confetti.json create mode 100644 app/animations/finish-lesson-modal-top.json create mode 100644 app/helpers/react_components/bootcamp/solve_exercise_page.rb create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/AnimationTimeline/AnimationTimeline.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/AnimationTimeline/types.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/clean-up-editor.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/colorScheme.d.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/colorScheme.js create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/create-theme.d.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/create-theme.js create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/customCursor.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/highlightRange.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/processActionsSequentially.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/processActionsSequentially.types.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/utils.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/describeError.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/information-widget.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/line-information.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/index.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/lineHighlighter.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/multiLineHighlighter.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/placeholder-widget.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyLineDeco.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyRanges.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyRangesExtension.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/underlineRange.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/getCodeMirrorFieldValue.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/index.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useHighlightLine.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useHighlightLineColor.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useReadonlyCompartment.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useReadonlyRanges.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useUnderlineRange.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/ControlButtons.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Instructions/Instructions.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsButtons.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsView.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Scrubber/InformationWidgetTiggleButton.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Scrubber/Scrubber.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Scrubber/ScrubberTooltipInformation.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Scrubber/useScrubber.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/useMountViewOrImage.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Tasks/TaskList.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Tasks/Tasks.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Tasks/completeSolution.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Tasks/launchConfetti.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Tasks/useTasks.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/CodeRun.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/IOTestResultView.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/PassMessage.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/StateTestResultView.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/useInspectedTestResultView.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/useShouldAnimate.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/Exercise.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/DrawExercise.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/examples.md create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/index.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/shapes.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/utils.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/view.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/maze/MazeExercise.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/exercises/wordle/WordleExercise.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/getFirstFailingOrFirstTest.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/submitCode.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/useOnRunCode.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/hooks/useResize.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/animationTimelineStore.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/editorStore.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/getInitialTasks.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/handleMarkTaskAsCompleted.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/processTasks.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/taskStore.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/testStore.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/types.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/store/utils.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/test-runner/README.md create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/test-runner/expect.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/execGenericTest.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/execProjectTest.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/generateAndRunTestSuite.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/generateExpects.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/test-runner/index.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/tests/DrawTests.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/utils/exerciseMap.ts create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/utils/showError.ts create mode 100644 app/javascript/components/bootcamp/common/ErrorBoundary/ErrorBoundary.tsx create mode 100644 app/javascript/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary.tsx create mode 100644 app/javascript/components/bootcamp/common/LottieAnimation.tsx create mode 100644 app/javascript/components/bootcamp/common/hooks/useLogger.ts create mode 100644 app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModal.tsx create mode 100644 app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModalContextWrapper.tsx create mode 100644 app/javascript/components/bootcamp/types/AnimationTimeline.d.ts create mode 100644 app/javascript/components/bootcamp/types/Matchers.d.ts create mode 100644 app/javascript/components/bootcamp/types/SolveExercisePage.d.ts create mode 100644 app/javascript/components/bootcamp/types/Tasks.d.ts create mode 100644 app/javascript/components/bootcamp/types/TestCallback.d.ts create mode 100644 app/javascript/components/bootcamp/types/TestConfig.d.ts create mode 100644 app/javascript/components/bootcamp/types/TestResult.d.ts create mode 100644 app/javascript/components/bootcamp/types/TestRunner.d.ts create mode 100644 app/javascript/interpreter/checks.ts create mode 100644 app/javascript/interpreter/environment.ts create mode 100644 app/javascript/interpreter/error.ts create mode 100644 app/javascript/interpreter/evaluation-result.ts create mode 100644 app/javascript/interpreter/executor.ts create mode 100644 app/javascript/interpreter/expression.ts create mode 100644 app/javascript/interpreter/frames.ts create mode 100644 app/javascript/interpreter/functions.ts create mode 100644 app/javascript/interpreter/interpreter.ts create mode 100644 app/javascript/interpreter/languages/javascript/error.ts create mode 100644 app/javascript/interpreter/languages/javascript/parser.ts create mode 100644 app/javascript/interpreter/languages/javascript/scanner.ts create mode 100644 app/javascript/interpreter/languages/javascript/token.ts create mode 100644 app/javascript/interpreter/languages/jikiscript/error.ts create mode 100644 app/javascript/interpreter/languages/jikiscript/helpers/complexErrors.ts create mode 100644 app/javascript/interpreter/languages/jikiscript/helpers/isTypo.ts create mode 100644 app/javascript/interpreter/languages/jikiscript/parser.ts create mode 100644 app/javascript/interpreter/languages/jikiscript/scanner.ts create mode 100644 app/javascript/interpreter/languages/jikiscript/token.ts create mode 100644 app/javascript/interpreter/locales/en/translation.json create mode 100644 app/javascript/interpreter/locales/nl/translation.json create mode 100644 app/javascript/interpreter/locales/system/translation.json create mode 100644 app/javascript/interpreter/location.ts create mode 100644 app/javascript/interpreter/resolver.ts create mode 100644 app/javascript/interpreter/statement.ts create mode 100644 app/javascript/interpreter/token.ts create mode 100644 app/javascript/interpreter/translator.ts create mode 100644 app/javascript/packs/bootcamp-ui.tsx rename bootcamp_content/projects/maze/exercises/manual-solve/{stub.jk => stub.jiki} (100%) diff --git a/app/animations/confetti.json b/app/animations/confetti.json new file mode 100644 index 0000000000..b067f67ab6 --- /dev/null +++ b/app/animations/confetti.json @@ -0,0 +1,35478 @@ +{ + "v": "5.7.12", + "fr": 30, + "ip": 0, + "op": 60, + "w": 512, + "h": 512, + "nm": "Confetti 1", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 3, + "nm": "Null 3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 0, "ix": 11 }, + "r": { "a": 0, "k": 260, "ix": 10 }, + "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [50, 50, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [102, 102, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "ip": 5, + "op": 60, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 50", + "parent": 1, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 14, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 19, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 41, + "s": [100] + }, + { "t": 57, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 487, "ix": 10 }, + "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [41, 41, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-19.362, 34.498], + [7.899, -25.433], + [37.607, 53.867], + [11.905, 108.592] + ], + "o": [ + [0, 0], + [42.457, -75.648], + [-9.025, 29.061], + [-47.221, -67.637], + [-3.807, -34.72] + ], + "v": [ + [1, 2], + [-48.536, -23.607], + [-76.476, -100.021], + [27.098, -130.112], + [-120.809, -222.715] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.474209026262, 1, 0.113771438599, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 17, + "s": [0] + }, + { "t": 54, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 14, + "s": [0] + }, + { "t": 49, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 14, + "op": 60, + "st": 14, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Shape Layer 49", + "parent": 1, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 18, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 40, + "s": [100] + }, + { "t": 56, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 353, "ix": 10 }, + "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [70, 70, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-14, 37], + [8.506, -58.529], + [28.328, 67.272], + [11.905, 108.592] + ], + "o": [ + [0, 0], + [9.966, -26.338], + [-12.365, 85.083], + [-32.013, -76.024], + [-3.807, -34.72] + ], + "v": [ + [1, 2], + [-48.536, -23.607], + [-76.476, -100.021], + [27.098, -130.112], + [-120.809, -222.715] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.728918397193, 0.113771438599, 1, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 16, + "s": [0] + }, + { "t": 53, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 13, + "s": [0] + }, + { "t": 48, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 13, + "op": 60, + "st": 13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Shape Layer 48", + "parent": 1, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 17, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 39, + "s": [100] + }, + { "t": 55, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 187, "ix": 10 }, + "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [70, 70, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-14, 37], + [8.254, -31.239], + [20.685, 70.001], + [17.795, 30.055] + ], + "o": [ + [0, 0], + [9.966, -26.338], + [-7.439, 28.154], + [-10.769, -36.442], + [-17.795, -30.055] + ], + "v": [ + [1, 2], + [2.692, -79.782], + [-49.416, -90.653], + [-14.589, -135.23], + [-105.31, -168.421] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.89785563151, 0.113771438599, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 15, + "s": [0] + }, + { "t": 52, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 12, + "s": [0] + }, + { "t": 47, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 12, + "op": 60, + "st": 12, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Shape Layer 47", + "parent": 1, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 16, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 38, + "s": [100] + }, + { "t": 54, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 203, "ix": 10 }, + "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [58, 58, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-14, 37], + [-1, 38], + [35.009, -27.828], + [-11, 31] + ], + "o": [ + [0, 0], + [9.966, -26.338], + [1, -38], + [-39, 31], + [11, -31] + ], + "v": [ + [1, 2], + [48, -39], + [29, -112], + [136, -107], + [103, -176] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.104197326361, 0.38322987276, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 14, + "s": [0] + }, + { "t": 51, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 11, + "s": [0] + }, + { "t": 46, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 11, + "op": 60, + "st": 11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Shape Layer 46", + "parent": 1, + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 15, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 37, + "s": [100] + }, + { "t": 53, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [50, 50, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-14, 37], + [-1, 38], + [35.009, -27.828], + [-11, 31] + ], + "o": [ + [0, 0], + [9.966, -26.338], + [1, -38], + [-39, 31], + [11, -31] + ], + "v": [ + [1, 2], + [48, -39], + [29, -112], + [136, -107], + [103, -176] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.062408177993, 0.248716571284, 0.738311887255, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 13, + "s": [0] + }, + { "t": 50, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 10, + "s": [0] + }, + { "t": 45, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 10, + "op": 60, + "st": 10, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "Shape Layer 45", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 14, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 36, + "s": [100] + }, + { "t": 52, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 487, "ix": 10 }, + "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [41, 41, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-19.362, 34.498], + [7.899, -25.433], + [37.607, 53.867], + [11.905, 108.592] + ], + "o": [ + [0, 0], + [42.457, -75.648], + [-9.025, 29.061], + [-47.221, -67.637], + [-3.807, -34.72] + ], + "v": [ + [1, 2], + [-48.536, -23.607], + [-76.476, -100.021], + [27.098, -130.112], + [-120.809, -222.715] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.474209026262, 1, 0.113771438599, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 12, + "s": [0] + }, + { "t": 49, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 9, + "s": [0] + }, + { "t": 44, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 9, + "op": 60, + "st": 9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 8, + "ty": 4, + "nm": "Shape Layer 43", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 8, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 35, + "s": [100] + }, + { "t": 51, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 353, "ix": 10 }, + "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [70, 70, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-14, 37], + [8.506, -58.529], + [28.328, 67.272], + [11.905, 108.592] + ], + "o": [ + [0, 0], + [9.966, -26.338], + [-12.365, 85.083], + [-32.013, -76.024], + [-3.807, -34.72] + ], + "v": [ + [1, 2], + [-48.536, -23.607], + [-76.476, -100.021], + [27.098, -130.112], + [-120.809, -222.715] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.728918397193, 0.113771438599, 1, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 11, + "s": [0] + }, + { "t": 48, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 8, + "s": [0] + }, + { "t": 43, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 8, + "op": 60, + "st": 8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 9, + "ty": 4, + "nm": "Shape Layer 42", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 34, + "s": [100] + }, + { "t": 50, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 187, "ix": 10 }, + "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [70, 70, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-14, 37], + [8.254, -31.239], + [20.685, 70.001], + [17.795, 30.055] + ], + "o": [ + [0, 0], + [9.966, -26.338], + [-7.439, 28.154], + [-10.769, -36.442], + [-17.795, -30.055] + ], + "v": [ + [1, 2], + [2.692, -79.782], + [-49.416, -90.653], + [-14.589, -135.23], + [-105.31, -168.421] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.89785563151, 0.113771438599, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 10, + "s": [0] + }, + { "t": 47, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 7, + "s": [0] + }, + { "t": 42, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 7, + "op": 60, + "st": 7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 10, + "ty": 4, + "nm": "Shape Layer 44", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 6, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 33, + "s": [100] + }, + { "t": 49, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 203, "ix": 10 }, + "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [58, 58, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-14, 37], + [-1, 38], + [35.009, -27.828], + [-11, 31] + ], + "o": [ + [0, 0], + [9.966, -26.338], + [1, -38], + [-39, 31], + [11, -31] + ], + "v": [ + [1, 2], + [48, -39], + [29, -112], + [136, -107], + [103, -176] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.104197326361, 0.38322987276, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 9, + "s": [0] + }, + { "t": 46, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 6, + "s": [0] + }, + { "t": 41, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 6, + "op": 60, + "st": 6, + "bm": 0 + }, + { + "ddd": 0, + "ind": 11, + "ty": 4, + "nm": "Shape Layer 41", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 5, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 32, + "s": [100] + }, + { "t": 48, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [256, 256, 0], "ix": 2, "l": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-14, 37], + [-1, 38], + [35.009, -27.828], + [-11, 31] + ], + "o": [ + [0, 0], + [9.966, -26.338], + [1, -38], + [-39, 31], + [11, -31] + ], + "v": [ + [1, 2], + [48, -39], + [29, -112], + [136, -107], + [103, -176] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.062408177993, 0.248716571284, 0.738311887255, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 0, + "k": 5, + "ix": 5, + "x": "var $bm_rt;\n$bm_rt = wiggle(5, 3);" + }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 8, + "s": [0] + }, + { "t": 45, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0], "y": [1] }, + "o": { "x": [0.139], "y": [0] }, + "t": 5, + "s": [0] + }, + { "t": 40, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 5, + "op": 60, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 12, + "ty": 4, + "nm": "Shape Layer 40", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 6, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 33, + "s": [100] + }, + { "t": 49, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.647 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 6, + "s": [269.95, 307.113, 0], + "to": [-0.323, -0.36, 0], + "ti": [1.346, 1.541, 0] + }, + { + "i": { "x": 0.833, "y": 0.769 }, + "o": { "x": 0.167, "y": 0.109 }, + "t": 7, + "s": [268.011, 304.951, 0], + "to": [-1.346, -1.541, 0], + "ti": [2.46, 3.542, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.13 }, + "t": 8, + "s": [261.875, 297.864, 0], + "to": [-2.46, -3.542, 0], + "ti": [2.232, 5.312, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 9, + "s": [253.252, 283.701, 0], + "to": [-2.232, -5.312, 0], + "ti": [0.637, 5.627, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 10, + "s": [248.481, 265.992, 0], + "to": [-0.637, -5.627, 0], + "ti": [-0.921, 4.788, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 11, + "s": [249.431, 249.939, 0], + "to": [0.921, -4.788, 0], + "ti": [-1.796, 3.705, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 12, + "s": [254.007, 237.262, 0], + "to": [1.796, -3.705, 0], + "ti": [-2.147, 2.784, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 13, + "s": [260.206, 227.707, 0], + "to": [2.147, -2.784, 0], + "ti": [-2.218, 2.088, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 14, + "s": [266.89, 220.559, 0], + "to": [2.218, -2.088, 0], + "ti": [-2.161, 1.578, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 15, + "s": [273.513, 215.179, 0], + "to": [2.161, -1.578, 0], + "ti": [-2.053, 1.203, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 16, + "s": [279.855, 211.089, 0], + "to": [2.053, -1.203, 0], + "ti": [-1.93, 0.918, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [285.832, 207.964, 0], + "to": [1.93, -0.918, 0], + "ti": [-1.801, 0.7, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [291.433, 205.582, 0], + "to": [1.801, -0.7, 0], + "ti": [-1.666, 0.538, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [296.641, 203.764, 0], + "to": [1.666, -0.538, 0], + "ti": [-1.53, 0.417, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [301.428, 202.354, 0], + "to": [1.53, -0.417, 0], + "ti": [-1.402, 0.32, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [305.818, 201.265, 0], + "to": [1.402, -0.32, 0], + "ti": [-1.283, 0.243, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [309.838, 200.433, 0], + "to": [1.283, -0.243, 0], + "ti": [-1.172, 0.18, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [313.514, 199.809, 0], + "to": [1.172, -0.18, 0], + "ti": [-1.068, 0.128, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [316.868, 199.355, 0], + "to": [1.068, -0.128, 0], + "ti": [-0.97, 0.084, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 25, + "s": [319.92, 199.043, 0], + "to": [0.97, -0.084, 0], + "ti": [-0.879, 0.048, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 26, + "s": [322.69, 198.85, 0], + "to": [0.879, -0.048, 0], + "ti": [-0.793, 0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 27, + "s": [325.194, 198.756, 0], + "to": [0.793, -0.017, 0], + "ti": [-0.712, -0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 28, + "s": [327.449, 198.747, 0], + "to": [0.712, 0.009, 0], + "ti": [-0.636, -0.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 29, + "s": [329.469, 198.808, 0], + "to": [0.636, 0.03, 0], + "ti": [-0.564, -0.048, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 30, + "s": [331.266, 198.928, 0], + "to": [0.564, 0.048, 0], + "ti": [-0.497, -0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 31, + "s": [332.854, 199.098, 0], + "to": [0.497, 0.063, 0], + "ti": [-0.434, -0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 32, + "s": [334.247, 199.309, 0], + "to": [0.434, 0.076, 0], + "ti": [-0.375, -0.085, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 33, + "s": [335.457, 199.552, 0], + "to": [0.375, 0.085, 0], + "ti": [-0.32, -0.092, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 34, + "s": [336.496, 199.819, 0], + "to": [0.32, 0.092, 0], + "ti": [-0.269, -0.097, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 35, + "s": [337.376, 200.105, 0], + "to": [0.269, 0.097, 0], + "ti": [-0.221, -0.099, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 36, + "s": [338.108, 200.401, 0], + "to": [0.221, 0.099, 0], + "ti": [-0.178, -0.1, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 37, + "s": [338.704, 200.702, 0], + "to": [0.178, 0.1, 0], + "ti": [-0.138, -0.098, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 38, + "s": [339.176, 200.999, 0], + "to": [0.138, 0.098, 0], + "ti": [-0.103, -0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 39, + "s": [339.534, 201.288, 0], + "to": [0.103, 0.094, 0], + "ti": [-0.071, -0.087, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 40, + "s": [339.791, 201.562, 0], + "to": [0.071, 0.087, 0], + "ti": [-0.043, -0.079, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 41, + "s": [339.958, 201.813, 0], + "to": [0.043, 0.079, 0], + "ti": [-0.02, -0.068, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.189 }, + "t": 42, + "s": [340.049, 202.035, 0], + "to": [0.02, 0.068, 0], + "ti": [0, -0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.191 }, + "t": 43, + "s": [340.075, 202.222, 0], + "to": [0, 0.055, 0], + "ti": [0.014, -0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.191 }, + "t": 44, + "s": [340.051, 202.365, 0], + "to": [-0.014, 0.04, 0], + "ti": [0.025, -0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.855 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 45, + "s": [339.989, 202.459, 0], + "to": [-0.025, 0.022, 0], + "ti": [0.024, -0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.799 }, + "o": { "x": 0.167, "y": 0.197 }, + "t": 46, + "s": [339.903, 202.496, 0], + "to": [-0.024, 0.002, 0], + "ti": [0.008, 0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.778 }, + "o": { "x": 0.167, "y": 0.143 }, + "t": 47, + "s": [339.844, 202.469, 0], + "to": [-0.008, -0.02, 0], + "ti": [-0.011, 0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.133 }, + "t": 48, + "s": [339.858, 202.373, 0], + "to": [0.011, -0.042, 0], + "ti": [-0.012, 0.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 49, + "s": [339.908, 202.219, 0], + "to": [0.012, -0.057, 0], + "ti": [-0.001, 0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 50, + "s": [339.927, 202.033, 0], + "to": [0.001, -0.066, 0], + "ti": [0.008, 0.072, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 51, + "s": [339.916, 201.823, 0], + "to": [-0.008, -0.072, 0], + "ti": [0.017, 0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 52, + "s": [339.877, 201.599, 0], + "to": [-0.017, -0.076, 0], + "ti": [0.026, 0.078, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 53, + "s": [339.812, 201.365, 0], + "to": [-0.026, -0.078, 0], + "ti": [0.033, 0.078, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 54, + "s": [339.723, 201.128, 0], + "to": [-0.033, -0.078, 0], + "ti": [0.04, 0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 55, + "s": [339.613, 200.895, 0], + "to": [-0.04, -0.076, 0], + "ti": [0.046, 0.073, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 56, + "s": [339.484, 200.67, 0], + "to": [-0.046, -0.073, 0], + "ti": [0.051, 0.068, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 57, + "s": [339.339, 200.457, 0], + "to": [-0.051, -0.068, 0], + "ti": [0.055, 0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 58, + "s": [339.179, 200.262, 0], + "to": [-0.055, -0.062, 0], + "ti": [0.029, 0.029, 0] + }, + { "t": 59, "s": [339.007, 200.087, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.27, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 6, + "s": [140.028, 87.797, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.945, 4.379, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, 0.567, 0] }, + "t": 7, + "s": [149.724, 81.426, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.242, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.158, 0.081, 0] }, + "t": 8, + "s": [108.654, 80.328, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 1.096, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, -0.235, 0] }, + "t": 9, + "s": [122.85, 125.952, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.361, 0.045, 0] }, + "t": 10, + "s": [67.435, 113.999, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.46, 0.786, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.186, -0.016, 0] }, + "t": 11, + "s": [77.828, 139.764, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.921, 0.918, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, 0.136, 0] }, + "t": 12, + "s": [86.275, 118.232, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.039, -1.479, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.604, -4.077, 0] }, + "t": 13, + "s": [132.517, 84.447, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.895, 1.074, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, 0.086, 0] }, + "t": 14, + "s": [130.233, 85.124, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.337, 1.045, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.399, 0.039, 0] }, + "t": 15, + "s": [104.061, 104.576, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 0.992, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, 0.029, 0] }, + "t": 16, + "s": [97.155, 67.886, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.652, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.607, -0.009, 0] }, + "t": 17, + "s": [131.988, 124.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.86, 0.858, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, -0.045, 0] }, + "t": 18, + "s": [137.528, 73.357, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.036, 1.045, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.207, 0.201, 0] }, + "t": 19, + "s": [88.621, 106.456, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 0.915, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, 0.029, 0] }, + "t": 20, + "s": [55.617, 129.849, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.262, 4.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.634, 4.996, 0] }, + "t": 21, + "s": [102.914, 93.756, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 0.946, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, 0.082, 0] }, + "t": 22, + "s": [97.417, 93.144, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.703, 0.499, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.154, -0.157, 0] }, + "t": 23, + "s": [54.264, 122.898, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.998, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.116, 0.1, 0] }, + "t": 24, + "s": [69.385, 112.598, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.949, 1.263, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.002, 0.458, 0] }, + "t": 25, + "s": [108.191, 60.937, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.891, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.135, 0.063, 0] }, + "t": 26, + "s": [70.4, 49.44, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.585, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.486, 0.354, 0] }, + "t": 27, + "s": [84.854, 97.16, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.234, 0.72, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.104, -0.001, 0] }, + "t": 28, + "s": [85.713, 111.857, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 0.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, 0.119, 0] }, + "t": 29, + "s": [89.136, 97.385, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.375, 0.152, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, -3.19, 0] }, + "t": 30, + "s": [76.083, 63.267, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 0.8, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.068, 0.092, 0] }, + "t": 31, + "s": [85.219, 64.136, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.877, 1.035, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, 0.143, 0] }, + "t": 32, + "s": [34.985, 72.111, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.257, 0.025, 0] }, + "t": 33, + "s": [97.846, 83.275, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.901, 2.92, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.02, 2.259, 0] }, + "t": 34, + "s": [127.941, 67.428, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.553, 0.981, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.536, 0.08, 0] }, + "t": 35, + "s": [103.695, 66.821, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.782, 0.701, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.102, -0.025, 0] }, + "t": 36, + "s": [99.227, 81.408, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.859, 0.804, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, 0.116, 0] }, + "t": 37, + "s": [79.727, 70.137, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.953, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.203, 0.145, 0] }, + "t": 38, + "s": [48.153, 40.939, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.831, 0.706, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.106, -0.113, 0] }, + "t": 39, + "s": [26.225, 1.63, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.052, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.164, 0.116, 0] }, + "t": 40, + "s": [35.878, 18.283, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.639, 0.832, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.032, -0.069, 0] }, + "t": 41, + "s": [45.795, 60.473, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.99, 0.924, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.108, 0.165, 0] }, + "t": 42, + "s": [29.734, 37.417, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, -0.589, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.011, -0.907, 0] }, + "t": 43, + "s": [-23.828, 13.866, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.893, 0.871, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.06, 0.088, 0] }, + "t": 44, + "s": [23.282, 15.847, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.57, 1.036, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.379, 0.235, 0] }, + "t": 45, + "s": [-4.081, 51.66, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 0.796, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.025, 0] }, + "t": 46, + "s": [-11.795, 71.385, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.979, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.061, 0.141, 0] }, + "t": 47, + "s": [48.641, 43.137, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.129, 0.825, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, -0.028, 0] }, + "t": 48, + "s": [13.642, 2.267, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, 1.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, 0.159, 0] }, + "t": 49, + "s": [-18.389, 32.951, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.864, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.028, 0.017, 0] }, + "t": 50, + "s": [63.189, 66.722, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.844, 1.094, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.146, 0.216, 0] }, + "t": 51, + "s": [2.261, 24.31, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.977, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.179, 0.044, 0] }, + "t": 52, + "s": [24.372, -2.358, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.521, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.314, -0.032, 0] }, + "t": 53, + "s": [43.66, 54.3, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 0.99, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.101, -0.001, 0] }, + "t": 54, + "s": [39.61, 13.352, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.265, 0.893, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.359, -0.012, 0] }, + "t": 55, + "s": [20.359, 53.589, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.823, 0.847, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, 0.371, 0] }, + "t": 56, + "s": [23.988, 18.274, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.068, 1.058, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.157, 0.183, 0] }, + "t": 57, + "s": [52.384, 8.05, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.034, 0] }, + "t": 58, + "s": [84.408, -0.484, 100] + }, + { "t": 59, "s": [26.091, 14.017, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 6, + "op": 60, + "st": 6, + "bm": 0 + }, + { + "ddd": 0, + "ind": 13, + "ty": 4, + "nm": "Shape Layer 39", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 16, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 38, + "s": [100] + }, + { "t": 54, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.587 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 11, + "s": [266.709, 299.63, 0], + "to": [-0.015, 0.376, 0], + "ti": [0.204, -1.854, 0] + }, + { + "i": { "x": 0.833, "y": 0.764 }, + "o": { "x": 0.167, "y": 0.104 }, + "t": 12, + "s": [266.621, 301.887, 0], + "to": [-0.204, 1.854, 0], + "ti": [0.96, -4.091, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 13, + "s": [265.488, 310.754, 0], + "to": [-0.96, 4.091, 0], + "ti": [2.202, -5.284, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 14, + "s": [260.859, 326.432, 0], + "to": [-2.202, 5.284, 0], + "ti": [3.145, -4.688, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 15, + "s": [252.276, 342.456, 0], + "to": [-3.145, 4.688, 0], + "ti": [3.441, -3.397, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 16, + "s": [241.99, 354.561, 0], + "to": [-3.441, 3.397, 0], + "ti": [3.35, -2.293, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 17, + "s": [231.629, 362.84, 0], + "to": [-3.35, 2.293, 0], + "ti": [3.107, -1.507, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 18, + "s": [221.889, 368.32, 0], + "to": [-3.107, 1.507, 0], + "ti": [2.823, -0.973, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 19, + "s": [212.988, 371.885, 0], + "to": [-2.823, 0.973, 0], + "ti": [2.545, -0.61, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 20, + "s": [204.948, 374.155, 0], + "to": [-2.545, 0.61, 0], + "ti": [2.287, -0.361, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 21, + "s": [197.719, 375.542, 0], + "to": [-2.287, 0.361, 0], + "ti": [2.057, -0.189, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [191.223, 376.321, 0], + "to": [-2.057, 0.189, 0], + "ti": [1.855, -0.069, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 23, + "s": [185.374, 376.678, 0], + "to": [-1.855, 0.069, 0], + "ti": [1.678, 0.016, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [180.091, 376.736, 0], + "to": [-1.678, -0.016, 0], + "ti": [1.52, 0.078, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 25, + "s": [175.308, 376.58, 0], + "to": [-1.52, -0.078, 0], + "ti": [1.379, 0.122, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [170.97, 376.27, 0], + "to": [-1.379, -0.122, 0], + "ti": [1.252, 0.155, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [167.033, 375.845, 0], + "to": [-1.252, -0.155, 0], + "ti": [1.137, 0.18, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [163.458, 375.337, 0], + "to": [-1.137, -0.18, 0], + "ti": [1.031, 0.198, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [160.214, 374.766, 0], + "to": [-1.031, -0.198, 0], + "ti": [0.933, 0.212, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [157.274, 374.147, 0], + "to": [-0.933, -0.212, 0], + "ti": [0.843, 0.223, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 31, + "s": [154.615, 373.492, 0], + "to": [-0.843, -0.223, 0], + "ti": [0.758, 0.232, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 32, + "s": [152.218, 372.807, 0], + "to": [-0.758, -0.232, 0], + "ti": [0.683, 0.239, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [150.067, 372.098, 0], + "to": [-0.683, -0.239, 0], + "ti": [0.619, 0.242, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 34, + "s": [148.12, 371.372, 0], + "to": [-0.619, -0.242, 0], + "ti": [0.56, 0.239, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [146.355, 370.647, 0], + "to": [-0.56, -0.239, 0], + "ti": [0.506, 0.232, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 36, + "s": [144.758, 369.937, 0], + "to": [-0.506, -0.232, 0], + "ti": [0.454, 0.219, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 37, + "s": [143.32, 369.258, 0], + "to": [-0.454, -0.219, 0], + "ti": [0.406, 0.203, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 38, + "s": [142.032, 368.621, 0], + "to": [-0.406, -0.203, 0], + "ti": [0.36, 0.184, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 39, + "s": [140.885, 368.038, 0], + "to": [-0.36, -0.184, 0], + "ti": [0.317, 0.162, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 40, + "s": [139.871, 367.517, 0], + "to": [-0.317, -0.162, 0], + "ti": [0.277, 0.138, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 41, + "s": [138.982, 367.066, 0], + "to": [-0.277, -0.138, 0], + "ti": [0.238, 0.111, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 42, + "s": [138.211, 366.692, 0], + "to": [-0.238, -0.111, 0], + "ti": [0.201, 0.083, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 43, + "s": [137.554, 366.399, 0], + "to": [-0.201, -0.083, 0], + "ti": [0.166, 0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.189 }, + "t": 44, + "s": [137.005, 366.191, 0], + "to": [-0.166, -0.055, 0], + "ti": [0.132, 0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.194 }, + "t": 45, + "s": [136.559, 366.071, 0], + "to": [-0.132, -0.025, 0], + "ti": [0.1, -0.005, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.195 }, + "t": 46, + "s": [136.211, 366.04, 0], + "to": [-0.1, 0.005, 0], + "ti": [0.069, -0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 47, + "s": [135.959, 366.098, 0], + "to": [-0.069, 0.034, 0], + "ti": [0.039, -0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.81 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 48, + "s": [135.797, 366.244, 0], + "to": [-0.039, 0.063, 0], + "ti": [0.011, -0.091, 0] + }, + { + "i": { "x": 0.833, "y": 0.81 }, + "o": { "x": 0.167, "y": 0.148 }, + "t": 49, + "s": [135.723, 366.476, 0], + "to": [-0.011, 0.091, 0], + "ti": [-0.016, -0.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.819 }, + "o": { "x": 0.167, "y": 0.149 }, + "t": 50, + "s": [135.732, 366.79, 0], + "to": [0.016, 0.118, 0], + "ti": [-0.036, -0.141, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.154 }, + "t": 51, + "s": [135.82, 367.181, 0], + "to": [0.036, 0.141, 0], + "ti": [-0.044, -0.159, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 52, + "s": [135.95, 367.634, 0], + "to": [0.044, 0.159, 0], + "ti": [-0.046, -0.173, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 53, + "s": [136.085, 368.134, 0], + "to": [0.046, 0.173, 0], + "ti": [-0.047, -0.184, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 54, + "s": [136.223, 368.671, 0], + "to": [0.047, 0.184, 0], + "ti": [-0.048, -0.193, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 55, + "s": [136.365, 369.239, 0], + "to": [0.048, 0.193, 0], + "ti": [-0.048, -0.197, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 56, + "s": [136.509, 369.827, 0], + "to": [0.048, 0.197, 0], + "ti": [-0.048, -0.198, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 57, + "s": [136.653, 370.423, 0], + "to": [0.048, 0.198, 0], + "ti": [-0.047, -0.195, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 58, + "s": [136.796, 371.017, 0], + "to": [0.047, 0.195, 0], + "ti": [-0.023, -0.096, 0] + }, + { "t": 59, "s": [136.937, 371.594, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.877, 0.953, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 11, + "s": [59.343, 96.124, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.969, 0.832, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.259, -0.107, 0] }, + "t": 12, + "s": [89.744, 43.042, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.861, 1.087, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.05, 0.166, 0] }, + "t": 13, + "s": [104.203, 66.307, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.424, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.208, 0.043, 0] }, + "t": 14, + "s": [95.197, 89.821, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.819, 0.904, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, -0.039, 0] }, + "t": 15, + "s": [89.153, 41.816, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.993, 0.548, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.154, 0.617, 0] }, + "t": 16, + "s": [125.946, 74.556, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.815, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.008, 0.102, 0] }, + "t": 17, + "s": [169.121, 79.673, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 1.513, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.152, -0.669, 0] }, + "t": 18, + "s": [129.751, 102.297, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.747, 1.071, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.266, 0.072, 0] }, + "t": 19, + "s": [81.726, 99.791, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.055, 0.899, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.124, 0.038, 0] }, + "t": 20, + "s": [93.197, 117.733, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 1.324, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.033, 0.474, 0] }, + "t": 21, + "s": [116.588, 84.536, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.473, 1.053, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.179, 0.066, 0] }, + "t": 22, + "s": [77.774, 77.458, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, 0.033, 0] }, + "t": 23, + "s": [80.336, 112.065, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.026, 1.108, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.364, 0.57, 0] }, + "t": 24, + "s": [93.979, 55.33, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.832, 0.728, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.047, 0] }, + "t": 25, + "s": [91.437, 45.624, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.069, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.076, 0.12, 0] }, + "t": 26, + "s": [94.777, 67.955, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, -0.116, 0] }, + "t": 27, + "s": [58.109, 118.474, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 0.352, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.102, 0.493, 0] }, + "t": 28, + "s": [125.074, 97.355, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.408, 0.998, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.104, 0.096, 0] }, + "t": 29, + "s": [95.015, 93.056, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.982, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, -0.002, 0] }, + "t": 30, + "s": [108.364, 63.932, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.838, -0.683, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.022, -1.218, 0] }, + "t": 31, + "s": [29.719, 92.263, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.975, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.172, 0.088, 0] }, + "t": 32, + "s": [91.786, 90.449, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.834, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.177, -0.036, 0] }, + "t": 33, + "s": [150.239, 55.635, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.842, 0.888, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, 0.167, 0] }, + "t": 34, + "s": [131.528, 79.867, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 1.053, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.177, 0.326, 0] }, + "t": 35, + "s": [114.424, 104, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.464, 0.726, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.141, 0.032, 0] }, + "t": 36, + "s": [99.134, 112.3, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.762, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.12, 0] }, + "t": 37, + "s": [104.825, 98.77, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.398, 1.006, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.54, 0.128, 0] }, + "t": 38, + "s": [67.48, 67.824, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 0.877, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 0.006, 0] }, + "t": 39, + "s": [65.344, 10.519, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-3.208, 1.093, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.911, 0.258, 0] }, + "t": 40, + "s": [77.671, 71.977, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.93, 0.905, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.085, 0.044, 0] }, + "t": 41, + "s": [76.639, 101.368, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.96, 1.238, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.443, 0.68, 0] }, + "t": 42, + "s": [25.532, 39.221, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.134, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.077, 0.062, 0] }, + "t": 43, + "s": [33.627, 30.543, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.683, 0.714, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, -0.194, 0] }, + "t": 44, + "s": [29.417, 64.046, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.008, 0.948, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.118, 0] }, + "t": 45, + "s": [40.374, 53.993, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.787, 1.36, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, -0.137, 0] }, + "t": 46, + "s": [71.134, 29.6, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.078, 1.002, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.137, 0.068, 0] }, + "t": 47, + "s": [37.38, 38.828, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.937, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 0.002, 0] }, + "t": 48, + "s": [-15.322, -10.291, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.695, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.139, -0.254, 0] }, + "t": 49, + "s": [86.713, 39.937, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.314, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.669, 0.115, 0] }, + "t": 50, + "s": [48.493, 27.546, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.73, 0.854, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.066, 0.012, 0] }, + "t": 51, + "s": [46.484, -5.44, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.035, 0.884, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.12, 0.194, 0] }, + "t": 52, + "s": [56.051, 33.097, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 1.27, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, 0.299, 0] }, + "t": 53, + "s": [77.513, 62.169, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.866, 0.851, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.324, 0.064, 0] }, + "t": 54, + "s": [46.909, 73.396, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.037, 0.912, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.222, 0.188, 0] }, + "t": 55, + "s": [53.173, 25.847, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.024, 1.423, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, 1.71, 0] }, + "t": 56, + "s": [56.946, -11.873, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.891, 0.665, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.019, 0.07, 0] }, + "t": 57, + "s": [96.787, -13.805, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.356, 0.111, 0] }, + "t": 58, + "s": [45.548, -2.059, 100] + }, + { "t": 59, "s": [29.917, 33.378, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167325382607, 0.716982433843, 1, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 11, + "op": 60, + "st": 11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 14, + "ty": 4, + "nm": "Shape Layer 38", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 34, + "s": [100] + }, + { "t": 50, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.591 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 7, + "s": [262.436, 299.331, 0], + "to": [0.489, -0.187, 0], + "ti": [-2.348, 1.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.764 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 8, + "s": [265.373, 298.21, 0], + "to": [2.348, -1.046, 0], + "ti": [-5.031, 2.854, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 9, + "s": [276.523, 293.055, 0], + "to": [5.031, -2.854, 0], + "ti": [-6.175, 4.882, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 10, + "s": [295.56, 281.084, 0], + "to": [6.175, -4.882, 0], + "ti": [-4.919, 5.974, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 11, + "s": [313.573, 263.763, 0], + "to": [4.919, -5.974, 0], + "ti": [-2.793, 5.995, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 12, + "s": [325.076, 245.24, 0], + "to": [2.793, -5.995, 0], + "ti": [-0.958, 5.467, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 13, + "s": [330.333, 227.794, 0], + "to": [0.958, -5.467, 0], + "ti": [0.382, 4.708, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 14, + "s": [330.823, 212.44, 0], + "to": [-0.382, -4.708, 0], + "ti": [1.261, 3.892, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 15, + "s": [328.039, 199.545, 0], + "to": [-1.261, -3.892, 0], + "ti": [1.765, 3.129, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 16, + "s": [323.257, 189.086, 0], + "to": [-1.765, -3.129, 0], + "ti": [2.001, 2.482, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 17, + "s": [317.447, 180.769, 0], + "to": [-2.001, -2.482, 0], + "ti": [2.064, 1.961, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 18, + "s": [311.25, 174.195, 0], + "to": [-2.064, -1.961, 0], + "ti": [2.024, 1.552, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [305.064, 169.001, 0], + "to": [-2.024, -1.552, 0], + "ti": [1.932, 1.236, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [299.106, 164.881, 0], + "to": [-1.932, -1.236, 0], + "ti": [1.816, 0.99, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [293.474, 161.588, 0], + "to": [-1.816, -0.99, 0], + "ti": [1.69, 0.797, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [288.212, 158.939, 0], + "to": [-1.69, -0.797, 0], + "ti": [1.563, 0.644, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 23, + "s": [283.333, 156.803, 0], + "to": [-1.563, -0.644, 0], + "ti": [1.437, 0.519, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 24, + "s": [278.836, 155.078, 0], + "to": [-1.437, -0.519, 0], + "ti": [1.316, 0.416, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 25, + "s": [274.712, 153.691, 0], + "to": [-1.316, -0.416, 0], + "ti": [1.201, 0.33, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 26, + "s": [270.942, 152.585, 0], + "to": [-1.201, -0.33, 0], + "ti": [1.094, 0.257, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 27, + "s": [267.505, 151.714, 0], + "to": [-1.094, -0.257, 0], + "ti": [0.992, 0.194, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 28, + "s": [264.381, 151.045, 0], + "to": [-0.992, -0.194, 0], + "ti": [0.897, 0.139, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [261.551, 150.551, 0], + "to": [-0.897, -0.139, 0], + "ti": [0.808, 0.091, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 30, + "s": [258.997, 150.211, 0], + "to": [-0.808, -0.091, 0], + "ti": [0.724, 0.048, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 31, + "s": [256.702, 150.007, 0], + "to": [-0.724, -0.048, 0], + "ti": [0.646, 0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 32, + "s": [254.651, 149.925, 0], + "to": [-0.646, -0.009, 0], + "ti": [0.572, -0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 33, + "s": [252.828, 149.951, 0], + "to": [-0.572, 0.025, 0], + "ti": [0.502, -0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 34, + "s": [251.221, 150.073, 0], + "to": [-0.502, 0.055, 0], + "ti": [0.437, -0.082, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 35, + "s": [249.815, 150.281, 0], + "to": [-0.437, 0.082, 0], + "ti": [0.377, -0.105, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 36, + "s": [248.597, 150.563, 0], + "to": [-0.377, 0.105, 0], + "ti": [0.321, -0.125, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 37, + "s": [247.552, 150.91, 0], + "to": [-0.321, 0.125, 0], + "ti": [0.269, -0.141, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 38, + "s": [246.671, 151.311, 0], + "to": [-0.269, 0.141, 0], + "ti": [0.22, -0.154, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 39, + "s": [245.941, 151.756, 0], + "to": [-0.22, 0.154, 0], + "ti": [0.174, -0.163, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 40, + "s": [245.353, 152.233, 0], + "to": [-0.174, 0.163, 0], + "ti": [0.132, -0.168, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 41, + "s": [244.897, 152.732, 0], + "to": [-0.132, 0.168, 0], + "ti": [0.093, -0.169, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 42, + "s": [244.562, 153.241, 0], + "to": [-0.093, 0.169, 0], + "ti": [0.057, -0.166, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 43, + "s": [244.34, 153.746, 0], + "to": [-0.057, 0.166, 0], + "ti": [0.024, -0.158, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 44, + "s": [244.221, 154.236, 0], + "to": [-0.024, 0.158, 0], + "ti": [-0.006, -0.145, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 45, + "s": [244.197, 154.694, 0], + "to": [0.006, 0.145, 0], + "ti": [-0.033, -0.128, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 46, + "s": [244.257, 155.108, 0], + "to": [0.033, 0.128, 0], + "ti": [-0.049, -0.109, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 47, + "s": [244.394, 155.461, 0], + "to": [0.049, 0.109, 0], + "ti": [-0.051, -0.108, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 48, + "s": [244.552, 155.765, 0], + "to": [0.051, 0.108, 0], + "ti": [-0.047, -0.12, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 49, + "s": [244.699, 156.107, 0], + "to": [0.047, 0.12, 0], + "ti": [-0.044, -0.131, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 50, + "s": [244.836, 156.487, 0], + "to": [0.044, 0.131, 0], + "ti": [-0.041, -0.137, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 51, + "s": [244.964, 156.891, 0], + "to": [0.041, 0.137, 0], + "ti": [-0.039, -0.14, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 52, + "s": [245.085, 157.309, 0], + "to": [0.039, 0.14, 0], + "ti": [-0.037, -0.14, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 53, + "s": [245.198, 157.733, 0], + "to": [0.037, 0.14, 0], + "ti": [-0.035, -0.138, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 54, + "s": [245.305, 158.152, 0], + "to": [0.035, 0.138, 0], + "ti": [-0.033, -0.133, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 55, + "s": [245.406, 158.559, 0], + "to": [0.033, 0.133, 0], + "ti": [-0.031, -0.125, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 56, + "s": [245.502, 158.947, 0], + "to": [0.031, 0.125, 0], + "ti": [-0.03, -0.116, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 57, + "s": [245.594, 159.31, 0], + "to": [0.03, 0.116, 0], + "ti": [-0.029, -0.104, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 58, + "s": [245.683, 159.641, 0], + "to": [0.029, 0.104, 0], + "ti": [-0.014, -0.049, 0] + }, + { "t": 59, "s": [245.769, 159.936, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.684, 1.023, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 7, + "s": [100.63, 69.657, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.351, -1.07, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.018, 0] }, + "t": 8, + "s": [104.514, 69.052, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.905, 1.153, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, 0.087, 0] }, + "t": 9, + "s": [115.346, 69.821, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.398, 0.948, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.695, 0.054, 0] }, + "t": 10, + "s": [58.871, 88.161, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 0.738, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, -0.137, 0] }, + "t": 11, + "s": [51.174, 36.165, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.972, 0.948, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.06, 0.122, 0] }, + "t": 12, + "s": [95.636, 55.822, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.882, 0.78, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.042, -0.141, 0] }, + "t": 13, + "s": [69.725, 97.853, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.246, 1.072, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.285, 0.134, 0] }, + "t": 14, + "s": [86.959, 82.233, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.96, 0.883, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, 0.039, 0] }, + "t": 15, + "s": [94.096, 56.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 1.134, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.077, 0.29, 0] }, + "t": 16, + "s": [151.503, 104.404, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.845, 0.96, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.166, 0.051, 0] }, + "t": 17, + "s": [121.653, 123.646, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.987, 1.023, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.181, -0.079, 0] }, + "t": 18, + "s": [91.668, 73.435, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.872, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.015, 0.018, 0] }, + "t": 19, + "s": [66.045, 99.285, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 1.2, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.223, 0.238, 0] }, + "t": 20, + "s": [87.746, 66.291, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.113, 0.059, 0] }, + "t": 21, + "s": [100.66, 48.526, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.102, 0.778, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.477, -0.182, 0] }, + "t": 22, + "s": [95.172, 108.893, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.575, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.046, 0.133, 0] }, + "t": 23, + "s": [95.987, 89.94, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.108, 0.256, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, -0.27, 0] }, + "t": 24, + "s": [94.176, 58.401, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.047, 0.094, 0] }, + "t": 25, + "s": [130.21, 65.835, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, -0.034, 0] }, + "t": 26, + "s": [47.499, 124.757, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.822, 1.024, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.43, -0.057, 0] }, + "t": 27, + "s": [105.068, 83.037, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.17, 0.979, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.157, 0.019, 0] }, + "t": 28, + "s": [118.917, 107.79, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.86, 0.93, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.056, -0.028, 0] }, + "t": 29, + "s": [134.616, 75.912, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.094, 0.206, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.205, -0.452, 0] }, + "t": 30, + "s": [86.877, 99.716, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.852, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, 0.093, 0] }, + "t": 31, + "s": [54.265, 96.009, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.9, 1.036, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.139, 0.19, 0] }, + "t": 32, + "s": [123.839, 64.381, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.39, 0.839, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.496, 0.025, 0] }, + "t": 33, + "s": [97.726, 39.711, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 0.871, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.097, 0.173, 0] }, + "t": 34, + "s": [92.458, 75.119, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.931, 1.058, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.019, 0.235, 0] }, + "t": 35, + "s": [59.151, 108.162, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.407, 0.742, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.405, 0.034, 0] }, + "t": 36, + "s": [86.256, 126.307, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.957, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.097, 0.123, 0] }, + "t": 37, + "s": [81.627, 95.551, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.83, 0.652, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.089, -0.391, 0] }, + "t": 38, + "s": [53.31, 31.043, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.098, 1.066, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.164, 0.11, 0] }, + "t": 39, + "s": [67.002, 42.37, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.972, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, 0.037, 0] }, + "t": 40, + "s": [81.207, 78.404, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.908, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.224, -0.041, 0] }, + "t": 41, + "s": [50.269, 13.881, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.43, 0.675, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.933, -1.114, 0] }, + "t": 42, + "s": [31.981, 57.039, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.97, 0.375, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, 0.112, 0] }, + "t": 43, + "s": [30.188, 54.035, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.919, 0.947, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.046, 0.096, 0] }, + "t": 44, + "s": [41.246, 45.317, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [17.435, 1.051, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-2.661, -0.148, 0] }, + "t": 45, + "s": [34.148, -11.396, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.997, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.083, 0.032, 0] }, + "t": 46, + "s": [34.363, 9.033, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.893, 0.829, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.004, -0.247, 0] }, + "t": 47, + "s": [-8.365, -24.009, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.892, 0.989, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.375, 0.163, 0] }, + "t": 48, + "s": [32.621, -15.669, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.847, 1.17, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.364, -0.012, 0] }, + "t": 49, + "s": [44.332, -6.94, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.476, 0.712, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.183, 0.056, 0] }, + "t": 50, + "s": [47.804, -14.568, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.098, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, 0.117, 0] }, + "t": 51, + "s": [50.704, 8.589, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 1.348, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, 0.46, 0] }, + "t": 52, + "s": [66.039, 65.528, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.638, 0.848, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.665, 0.067, 0] }, + "t": 53, + "s": [32.735, 78.112, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.718, 0.935, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, 0.185, 0] }, + "t": 54, + "s": [30.98, 12.995, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.692, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.118, -0.305, 0] }, + "t": 55, + "s": [46.164, -40.385, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.25, 0.862, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.313, 0.114, 0] }, + "t": 56, + "s": [82.432, -28.944, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 0.97, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, 0.211, 0] }, + "t": 57, + "s": [74.813, 1.96, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.112, -0.047, 0] }, + "t": 58, + "s": [13.817, 22.06, 100] + }, + { "t": 59, "s": [39.779, 9.173, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 7, + "op": 60, + "st": 7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 15, + "ty": 4, + "nm": "Shape Layer 37", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 14, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 36, + "s": [100] + }, + { "t": 52, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.583 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 9, + "s": [264.075, 300.144, 0], + "to": [-0.069, 0.468, 0], + "ti": [0.355, -2.342, 0] + }, + { + "i": { "x": 0.833, "y": 0.763 }, + "o": { "x": 0.167, "y": 0.104 }, + "t": 10, + "s": [263.663, 302.955, 0], + "to": [-0.355, 2.342, 0], + "ti": [0.559, -5.353, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 11, + "s": [261.945, 314.199, 0], + "to": [-0.559, 5.353, 0], + "ti": [0.004, -7.357, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 12, + "s": [260.312, 335.072, 0], + "to": [-0.004, 7.357, 0], + "ti": [-1.215, -7.142, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 13, + "s": [261.922, 358.34, 0], + "to": [1.215, 7.142, 0], + "ti": [-2.396, -5.718, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 14, + "s": [267.601, 377.926, 0], + "to": [2.396, 5.718, 0], + "ti": [-3.152, -4.167, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 15, + "s": [276.299, 392.647, 0], + "to": [3.152, 4.167, 0], + "ti": [-3.444, -2.85, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 16, + "s": [286.512, 402.925, 0], + "to": [3.444, 2.85, 0], + "ti": [-3.405, -1.874, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 17, + "s": [296.962, 409.748, 0], + "to": [3.405, 1.874, 0], + "ti": [-3.2, -1.208, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 18, + "s": [306.94, 414.169, 0], + "to": [3.2, 1.208, 0], + "ti": [-2.937, -0.769, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 19, + "s": [316.159, 416.998, 0], + "to": [2.937, 0.769, 0], + "ti": [-2.672, -0.481, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [324.559, 418.783, 0], + "to": [2.672, 0.481, 0], + "ti": [-2.428, -0.291, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [332.191, 419.883, 0], + "to": [2.428, 0.291, 0], + "ti": [-2.206, -0.163, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [339.125, 420.527, 0], + "to": [2.206, 0.163, 0], + "ti": [-2.007, -0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [345.429, 420.863, 0], + "to": [2.007, 0.077, 0], + "ti": [-1.827, -0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [351.165, 420.991, 0], + "to": [1.827, 0.019, 0], + "ti": [-1.665, 0.021, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 25, + "s": [356.391, 420.977, 0], + "to": [1.665, -0.021, 0], + "ti": [-1.519, 0.049, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [361.156, 420.865, 0], + "to": [1.519, -0.049, 0], + "ti": [-1.386, 0.069, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [365.504, 420.683, 0], + "to": [1.386, -0.069, 0], + "ti": [-1.264, 0.084, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [369.472, 420.452, 0], + "to": [1.264, -0.084, 0], + "ti": [-1.151, 0.096, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [373.088, 420.182, 0], + "to": [1.151, -0.096, 0], + "ti": [-1.046, 0.107, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [376.379, 419.878, 0], + "to": [1.046, -0.107, 0], + "ti": [-0.947, 0.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 31, + "s": [379.365, 419.542, 0], + "to": [0.947, -0.118, 0], + "ti": [-0.856, 0.124, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 32, + "s": [382.063, 419.172, 0], + "to": [0.856, -0.124, 0], + "ti": [-0.773, 0.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 33, + "s": [384.499, 418.801, 0], + "to": [0.773, -0.118, 0], + "ti": [-0.697, 0.107, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 34, + "s": [386.7, 418.464, 0], + "to": [0.697, -0.107, 0], + "ti": [-0.626, 0.097, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 35, + "s": [388.681, 418.159, 0], + "to": [0.626, -0.097, 0], + "ti": [-0.561, 0.088, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 36, + "s": [390.459, 417.883, 0], + "to": [0.561, -0.088, 0], + "ti": [-0.5, 0.079, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 37, + "s": [392.047, 417.633, 0], + "to": [0.5, -0.079, 0], + "ti": [-0.443, 0.072, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 38, + "s": [393.458, 417.406, 0], + "to": [0.443, -0.072, 0], + "ti": [-0.39, 0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 39, + "s": [394.704, 417.199, 0], + "to": [0.39, -0.066, 0], + "ti": [-0.34, 0.061, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 40, + "s": [395.795, 417.009, 0], + "to": [0.34, -0.061, 0], + "ti": [-0.293, 0.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 41, + "s": [396.741, 416.833, 0], + "to": [0.293, -0.057, 0], + "ti": [-0.249, 0.053, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 42, + "s": [397.551, 416.669, 0], + "to": [0.249, -0.053, 0], + "ti": [-0.207, 0.05, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 43, + "s": [398.233, 416.514, 0], + "to": [0.207, -0.05, 0], + "ti": [-0.168, 0.048, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 44, + "s": [398.794, 416.367, 0], + "to": [0.168, -0.048, 0], + "ti": [-0.132, 0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 45, + "s": [399.242, 416.225, 0], + "to": [0.132, -0.046, 0], + "ti": [-0.097, 0.045, 0] + }, + { + "i": { "x": 0.833, "y": 0.857 }, + "o": { "x": 0.167, "y": 0.195 }, + "t": 46, + "s": [399.584, 416.088, 0], + "to": [0.097, -0.045, 0], + "ti": [-0.064, 0.044, 0] + }, + { + "i": { "x": 0.833, "y": 0.857 }, + "o": { "x": 0.167, "y": 0.2 }, + "t": 47, + "s": [399.824, 415.954, 0], + "to": [0.064, -0.044, 0], + "ti": [-0.034, 0.043, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.2 }, + "t": 48, + "s": [399.97, 415.824, 0], + "to": [0.034, -0.043, 0], + "ti": [-0.012, 0.044, 0] + }, + { + "i": { "x": 0.833, "y": 0.82 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 49, + "s": [400.026, 415.696, 0], + "to": [0.012, -0.044, 0], + "ti": [-0.006, 0.049, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 50, + "s": [400.041, 415.559, 0], + "to": [0.006, -0.049, 0], + "ti": [-0.008, 0.056, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 51, + "s": [400.063, 415.401, 0], + "to": [0.008, -0.056, 0], + "ti": [-0.011, 0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 52, + "s": [400.091, 415.224, 0], + "to": [0.011, -0.062, 0], + "ti": [-0.014, 0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 53, + "s": [400.129, 415.031, 0], + "to": [0.014, -0.066, 0], + "ti": [-0.017, 0.07, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 54, + "s": [400.175, 414.825, 0], + "to": [0.017, -0.07, 0], + "ti": [-0.021, 0.073, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 55, + "s": [400.232, 414.61, 0], + "to": [0.021, -0.073, 0], + "ti": [-0.025, 0.074, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 56, + "s": [400.301, 414.389, 0], + "to": [0.025, -0.074, 0], + "ti": [-0.029, 0.073, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 57, + "s": [400.382, 414.168, 0], + "to": [0.029, -0.073, 0], + "ti": [-0.034, 0.071, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 58, + "s": [400.476, 413.95, 0], + "to": [0.034, -0.071, 0], + "ti": [-0.018, 0.035, 0] + }, + { "t": 59, "s": [400.585, 413.741, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.237, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 9, + "s": [60.433, 69.807, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.354, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.078, 0.012, 0] }, + "t": 10, + "s": [57.035, 63.909, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.869, 0.914, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.136, 0.096, 0] }, + "t": 11, + "s": [110.865, 70.792, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.993, 2.539, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.23, 2.807, 0] }, + "t": 12, + "s": [90.384, 117.236, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.615, 1.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.008, 0.079, 0] }, + "t": 13, + "s": [78.755, 118.657, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.957, 0.878, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.106, 0.017, 0] }, + "t": 14, + "s": [89.349, 90.995, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.759, 1.314, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.09, 0.263, 0] }, + "t": 15, + "s": [127.76, 125.63, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.85, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.128, 0.066, 0] }, + "t": 16, + "s": [109.298, 141.669, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.93, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.187, -0.134, 0] }, + "t": 17, + "s": [74.466, 65.123, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.468, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.45, 0.009, 0] }, + "t": 18, + "s": [46.407, 94.474, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.94, 2.673, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, 2.042, 0] }, + "t": 19, + "s": [50.79, 61.594, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.179, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.209, 0.079, 0] }, + "t": 20, + "s": [74.379, 60.195, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 1.053, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.057, 0.166, 0] }, + "t": 21, + "s": [67.656, 89.669, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.318, 0.963, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.577, 0.032, 0] }, + "t": 22, + "s": [88.817, 119.34, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.032, 0.863, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, -0.068, 0] }, + "t": 23, + "s": [92.391, 70.889, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 1.002, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.023, 0.212, 0] }, + "t": 24, + "s": [145.365, 97.56, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.702, 0.895, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.509, 0.002, 0] }, + "t": 25, + "s": [71.948, 114.853, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.886, 1.201, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, 0.407, 0] }, + "t": 26, + "s": [67.657, 97.077, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.837, 0.928, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.312, 0.059, 0] }, + "t": 27, + "s": [108.077, 92.496, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.302, 1.255, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.171, -0.517, 0] }, + "t": 28, + "s": [122.812, 108.142, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 1.236, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.065, 0.063, 0] }, + "t": 29, + "s": [136.892, 105.97, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.917, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.168, 0.062, 0] }, + "t": 30, + "s": [71.752, 114.791, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [4.698, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-10.728, 0.167, 0] }, + "t": 31, + "s": [93.325, 80.942, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.281, 2.111, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, 0.997, 0] }, + "t": 32, + "s": [93.159, 47.153, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.918, 0.796, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, 0.078, 0] }, + "t": 33, + "s": [100.704, 44.07, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-6.847, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-7.898, 0.141, 0] }, + "t": 34, + "s": [67.68, 88.243, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.94, 0.681, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.084, -0.275, 0] }, + "t": 35, + "s": [68.025, 152.101, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.562, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.209, 0.113, 0] }, + "t": 36, + "s": [100.152, 137.254, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.103, 0.504, 0] }, + "t": 37, + "s": [91.001, 95.342, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.918, -2.094, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.001, 0.554, 0] }, + "t": 38, + "s": [52.026, 87.036, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-2.601, 0.998, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-3.839, 0.086, 0] }, + "t": 39, + "s": [90.362, 85.565, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 0.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.085, -0.003, 0] }, + "t": 40, + "s": [89.547, 32.423, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.446, 1.058, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.669, 1.085, 0] }, + "t": 41, + "s": [55.168, 83.983, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, 0.034, 0] }, + "t": 42, + "s": [58.978, 88.274, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.109, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.325, 0.091, 0] }, + "t": 43, + "s": [34.79, 80.994, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 1.213, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.047, 1.844, 0] }, + "t": 44, + "s": [39.732, 2.714, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [4.228, 1.121, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.292, 0.06, 0] }, + "t": 45, + "s": [28.352, -0.992, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, 0.049, 0] }, + "t": 46, + "s": [29.041, 12.182, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.923, 0.921, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.02, -0.04, 0] }, + "t": 47, + "s": [1.635, -20.19, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.207, 3.708, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.991, -1.388, 0] }, + "t": 48, + "s": [23.803, 1.627, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.933, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.078, 0.081, 0] }, + "t": 49, + "s": [22.083, 0.392, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.444, 0.353, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.338, 0.943, 0] }, + "t": 50, + "s": [48.704, 41.779, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.843, 1.011, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.098, 0.096, 0] }, + "t": 51, + "s": [43.437, 45.791, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.042, 0.741, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.178, 0.01, 0] }, + "t": 52, + "s": [13.575, 72.931, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.846, 0.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.028, 0.123, 0] }, + "t": 53, + "s": [-12.851, 42.13, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.907, 1.471, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.181, 1.058, 0] }, + "t": 54, + "s": [26.868, -22.827, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.014, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.832, 0.071, 0] }, + "t": 55, + "s": [60.696, -28.382, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 6.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.077, 11.039, 0] }, + "t": 56, + "s": [64.461, 8.569, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.945, 1.005, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.093, 0.082, 0] }, + "t": 57, + "s": [14.897, 8.85, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.162, 0.005, 0] }, + "t": 58, + "s": [38.326, -8.337, 100] + }, + { "t": 59, "s": [30.376, 9.931, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167325382607, 0.716982433843, 1, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 9, + "op": 60, + "st": 9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 16, + "ty": 4, + "nm": "Shape Layer 36", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 5, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 32, + "s": [100] + }, + { "t": 48, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.604 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 5, + "s": [268.501, 303.894, 0], + "to": [0.373, -0.267, 0], + "ti": [-1.332, 1.601, 0] + }, + { + "i": { "x": 0.833, "y": 0.775 }, + "o": { "x": 0.167, "y": 0.106 }, + "t": 6, + "s": [270.738, 302.29, 0], + "to": [1.332, -1.601, 0], + "ti": [1.952, 1.768, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.133 }, + "t": 7, + "s": [276.491, 294.286, 0], + "to": [-1.952, -1.768, 0], + "ti": [6.31, 0.166, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 8, + "s": [259.026, 291.685, 0], + "to": [-6.31, -0.166, 0], + "ti": [6.364, -0.502, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 9, + "s": [238.628, 293.288, 0], + "to": [-6.364, 0.502, 0], + "ti": [5.435, -0.368, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 10, + "s": [220.844, 294.694, 0], + "to": [-5.435, 0.368, 0], + "ti": [4.549, -0.177, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 11, + "s": [206.017, 295.497, 0], + "to": [-4.549, 0.177, 0], + "ti": [3.853, -0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 12, + "s": [193.549, 295.758, 0], + "to": [-3.853, 0.014, 0], + "ti": [3.314, 0.117, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 13, + "s": [182.897, 295.583, 0], + "to": [-3.314, -0.117, 0], + "ti": [2.886, 0.223, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 14, + "s": [173.668, 295.056, 0], + "to": [-2.886, -0.223, 0], + "ti": [2.537, 0.31, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 15, + "s": [165.584, 294.243, 0], + "to": [-2.537, -0.31, 0], + "ti": [2.246, 0.383, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [158.446, 293.194, 0], + "to": [-2.246, -0.383, 0], + "ti": [2.001, 0.441, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [152.105, 291.947, 0], + "to": [-2.001, -0.441, 0], + "ti": [1.789, 0.485, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [146.441, 290.551, 0], + "to": [-1.789, -0.485, 0], + "ti": [1.601, 0.519, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [141.373, 289.038, 0], + "to": [-1.601, -0.519, 0], + "ti": [1.435, 0.544, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [136.833, 287.437, 0], + "to": [-1.435, -0.544, 0], + "ti": [1.285, 0.562, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 21, + "s": [132.765, 285.771, 0], + "to": [-1.285, -0.562, 0], + "ti": [1.15, 0.573, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [129.121, 284.063, 0], + "to": [-1.15, -0.573, 0], + "ti": [1.027, 0.578, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [125.863, 282.331, 0], + "to": [-1.027, -0.578, 0], + "ti": [0.915, 0.576, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [122.957, 280.597, 0], + "to": [-0.915, -0.576, 0], + "ti": [0.814, 0.569, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [120.371, 278.877, 0], + "to": [-0.814, -0.569, 0], + "ti": [0.721, 0.558, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [118.075, 277.184, 0], + "to": [-0.721, -0.558, 0], + "ti": [0.637, 0.542, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 27, + "s": [116.044, 275.532, 0], + "to": [-0.637, -0.542, 0], + "ti": [0.56, 0.523, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [114.254, 273.931, 0], + "to": [-0.56, -0.523, 0], + "ti": [0.49, 0.502, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 29, + "s": [112.684, 272.392, 0], + "to": [-0.49, -0.502, 0], + "ti": [0.427, 0.478, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [111.312, 270.921, 0], + "to": [-0.427, -0.478, 0], + "ti": [0.369, 0.453, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 31, + "s": [110.122, 269.523, 0], + "to": [-0.369, -0.453, 0], + "ti": [0.317, 0.426, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 32, + "s": [109.095, 268.204, 0], + "to": [-0.317, -0.426, 0], + "ti": [0.27, 0.399, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 33, + "s": [108.219, 266.966, 0], + "to": [-0.27, -0.399, 0], + "ti": [0.226, 0.37, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 34, + "s": [107.478, 265.812, 0], + "to": [-0.226, -0.37, 0], + "ti": [0.186, 0.342, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 35, + "s": [106.862, 264.743, 0], + "to": [-0.186, -0.342, 0], + "ti": [0.15, 0.313, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 36, + "s": [106.36, 263.762, 0], + "to": [-0.15, -0.313, 0], + "ti": [0.117, 0.283, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 37, + "s": [105.962, 262.868, 0], + "to": [-0.117, -0.283, 0], + "ti": [0.086, 0.254, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 38, + "s": [105.66, 262.062, 0], + "to": [-0.086, -0.254, 0], + "ti": [0.058, 0.224, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 39, + "s": [105.445, 261.346, 0], + "to": [-0.058, -0.224, 0], + "ti": [0.032, 0.194, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 40, + "s": [105.312, 260.718, 0], + "to": [-0.032, -0.194, 0], + "ti": [0.008, 0.164, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 41, + "s": [105.253, 260.18, 0], + "to": [-0.008, -0.164, 0], + "ti": [-0.014, 0.135, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 42, + "s": [105.263, 259.732, 0], + "to": [0.014, -0.135, 0], + "ti": [-0.034, 0.104, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 43, + "s": [105.336, 259.373, 0], + "to": [0.034, -0.104, 0], + "ti": [-0.052, 0.074, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 44, + "s": [105.467, 259.105, 0], + "to": [0.052, -0.074, 0], + "ti": [-0.065, 0.05, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 45, + "s": [105.65, 258.927, 0], + "to": [0.065, -0.05, 0], + "ti": [-0.069, 0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 46, + "s": [105.86, 258.807, 0], + "to": [0.069, -0.036, 0], + "ti": [-0.062, 0.029, 0] + }, + { + "i": { "x": 0.833, "y": 0.856 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 47, + "s": [106.065, 258.712, 0], + "to": [0.062, -0.029, 0], + "ti": [-0.047, 0.024, 0] + }, + { + "i": { "x": 0.833, "y": 0.863 }, + "o": { "x": 0.167, "y": 0.197 }, + "t": 48, + "s": [106.232, 258.632, 0], + "to": [0.047, -0.024, 0], + "ti": [-0.031, 0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.876 }, + "o": { "x": 0.167, "y": 0.214 }, + "t": 49, + "s": [106.349, 258.566, 0], + "to": [0.031, -0.02, 0], + "ti": [-0.015, 0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.252 }, + "t": 50, + "s": [106.418, 258.515, 0], + "to": [0.015, -0.014, 0], + "ti": [0.001, 0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.742 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 51, + "s": [106.44, 258.479, 0], + "to": [-0.001, -0.009, 0], + "ti": [0.016, 0.003, 0] + }, + { + "i": { "x": 0.833, "y": 0.781 }, + "o": { "x": 0.167, "y": 0.123 }, + "t": 52, + "s": [106.414, 258.46, 0], + "to": [-0.016, -0.003, 0], + "ti": [0.031, -0.003, 0] + }, + { + "i": { "x": 0.833, "y": 0.801 }, + "o": { "x": 0.167, "y": 0.134 }, + "t": 53, + "s": [106.343, 258.459, 0], + "to": [-0.031, 0.003, 0], + "ti": [0.045, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.811 }, + "o": { "x": 0.167, "y": 0.144 }, + "t": 54, + "s": [106.228, 258.475, 0], + "to": [-0.045, 0.008, 0], + "ti": [0.059, -0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.149 }, + "t": 55, + "s": [106.07, 258.51, 0], + "to": [-0.059, 0.014, 0], + "ti": [0.072, -0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.82 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 56, + "s": [105.873, 258.562, 0], + "to": [-0.072, 0.02, 0], + "ti": [0.084, -0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.155 }, + "t": 57, + "s": [105.639, 258.632, 0], + "to": [-0.084, 0.026, 0], + "ti": [0.095, -0.032, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.157 }, + "t": 58, + "s": [105.369, 258.719, 0], + "to": [-0.095, 0.032, 0], + "ti": [0.05, -0.017, 0] + }, + { "t": 59, "s": [105.069, 258.823, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, -0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 5, + "s": [111.822, 109.374, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.087, 0.955, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.414, 0.087, 0] }, + "t": 6, + "s": [100.055, 106.422, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.812, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, -0.097, 0] }, + "t": 7, + "s": [97.093, 40.951, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.773, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.117, 0.15, 0] }, + "t": 8, + "s": [67.613, 71.247, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.893, 1.157, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.132, -0.129, 0] }, + "t": 9, + "s": [79.872, 109.348, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.215, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.381, 0.054, 0] }, + "t": 10, + "s": [101.054, 94.428, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 0.945, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.06, -0.015, 0] }, + "t": 11, + "s": [106.979, 137.485, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.974, 0.793, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.477, -0.164, 0] }, + "t": 12, + "s": [85.798, 101.174, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.674, 1.013, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.039, 0.139, 0] }, + "t": 13, + "s": [88.947, 113.411, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 0.677, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, 0.011, 0] }, + "t": 14, + "s": [86.793, 131.596, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.583, 0.977, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.914, 0.112, 0] }, + "t": 15, + "s": [106.377, 110.603, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.868, 0.899, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.088, -0.033, 0] }, + "t": 16, + "s": [104.74, 50.192, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.873, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.225, 0.471, 0] }, + "t": 17, + "s": [75.287, 93.627, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 0.963, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.244, 0.557, 0] }, + "t": 18, + "s": [57.971, 102.957, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [6.07, 1.272, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.53, -0.068, 0] }, + "t": 19, + "s": [48.983, 104.599, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.801, 1.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.082, 0.064, 0] }, + "t": 20, + "s": [48.677, 103.694, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.786, 1.017, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.143, 0.076, 0] }, + "t": 21, + "s": [67.607, 107.546, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.136, 0.014, 0] }, + "t": 22, + "s": [93.956, 61.633, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.898, 0.924, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.001, -0.051, 0] }, + "t": 23, + "s": [135.372, 117.12, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.936, 1.36, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.448, -0.923, 0] }, + "t": 24, + "s": [94.654, 82.761, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.146, 1.103, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.276, 0.068, 0] }, + "t": 25, + "s": [85.351, 85.606, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.778, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, 0.046, 0] }, + "t": 26, + "s": [87.506, 70.455, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.973, 0.043, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.134, 1.425, 0] }, + "t": 27, + "s": [107.432, 104.297, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.792, 1.155, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.04, 0.091, 0] }, + "t": 28, + "s": [140.473, 106.399, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.932, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.139, 0.054, 0] }, + "t": 29, + "s": [118.147, 128.441, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.974, 1.121, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.054, -0.359, 0] }, + "t": 30, + "s": [84.776, 65.43, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.673, 0.886, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.038, 0.049, 0] }, + "t": 31, + "s": [105.029, 77.29, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.925, 1.408, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.112, 0.311, 0] }, + "t": 32, + "s": [91.068, 48.266, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.647, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.747, 0.069, 0] }, + "t": 33, + "s": [50.228, 37.635, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.827, 0.939, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.109, -0.474, 0] }, + "t": 34, + "s": [54.329, 100.336, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.244, 1.036, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.161, -0.223, 0] }, + "t": 35, + "s": [67.613, 90.964, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 0.595, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, 0.025, 0] }, + "t": 36, + "s": [81.902, 93.51, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.785, 0.829, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.101, 0.105, 0] }, + "t": 37, + "s": [25.699, 89.858, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.976, 0.897, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.136, 0.163, 0] }, + "t": 38, + "s": [51.156, 75.74, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 1.149, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.034, 0.43, 0] }, + "t": 39, + "s": [91.35, 60.958, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.534, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.231, 0.053, 0] }, + "t": 40, + "s": [62.734, 57.409, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 0.526, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.072, -0.014, 0] }, + "t": 41, + "s": [70.32, 67.319, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, 0.923, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.24, 0.101, 0] }, + "t": 42, + "s": [14.17, 58.838, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.32, 0.689, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.419, -0.944, 0] }, + "t": 43, + "s": [28.636, 19.113, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.869, 1.114, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.066, 0.114, 0] }, + "t": 44, + "s": [32.23, 22.336, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.092, 1.006, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.228, 0.048, 0] }, + "t": 45, + "s": [14.851, 31.15, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.899, 1.001, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, 0.005, 0] }, + "t": 46, + "s": [4.812, 10.283, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.075, 1.195, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.472, 0.001, 0] }, + "t": 47, + "s": [25.925, 32.587, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.799, 0.984, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 0.058, 0] }, + "t": 48, + "s": [30.453, 9.9, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.842, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.142, -0.02, 0] }, + "t": 49, + "s": [21.826, 85.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.674, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.177, -0.039, 0] }, + "t": 50, + "s": [9.608, 24.619, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.022, 0.324, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.112, -0.462, 0] }, + "t": 51, + "s": [-1.289, 66.096, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.018, 0.095, 0] }, + "t": 52, + "s": [-33.054, 59.758, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 1.101, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.173, 1.876, 0] }, + "t": 53, + "s": [7.239, 14.644, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.273, 1.364, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.683, 0.046, 0] }, + "t": 54, + "s": [44.549, 12.547, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.913, 0.998, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, 0.068, 0] }, + "t": 55, + "s": [40.492, 17.184, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.637, 1.065, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.953, -0.003, 0] }, + "t": 56, + "s": [9.161, -7.703, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.935, 0.991, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, 0.037, 0] }, + "t": 57, + "s": [7.764, 16.458, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.3, -0.01, 0] }, + "t": 58, + "s": [36.594, -26.534, 100] + }, + { "t": 59, "s": [30.332, 11.798, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 5, + "op": 60, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 17, + "ty": 4, + "nm": "Shape Layer 35", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 4, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 31, + "s": [100] + }, + { "t": 47, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.58 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 4, + "s": [269.847, 301.952, 0], + "to": [0.17, -0.147, 0], + "ti": [-0.855, 0.741, 0] + }, + { + "i": { "x": 0.833, "y": 0.763 }, + "o": { "x": 0.167, "y": 0.104 }, + "t": 5, + "s": [270.865, 301.071, 0], + "to": [0.855, -0.741, 0], + "ti": [-1.897, 1.74, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 6, + "s": [274.976, 297.505, 0], + "to": [1.897, -1.74, 0], + "ti": [-2.487, 2.492, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 7, + "s": [282.245, 290.631, 0], + "to": [2.487, -2.492, 0], + "ti": [-2.333, 2.568, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 8, + "s": [289.898, 282.555, 0], + "to": [2.333, -2.568, 0], + "ti": [-1.909, 2.26, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 9, + "s": [296.244, 275.226, 0], + "to": [1.909, -2.26, 0], + "ti": [-1.56, 1.916, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 10, + "s": [301.355, 268.994, 0], + "to": [1.56, -1.916, 0], + "ti": [-1.325, 1.619, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 11, + "s": [305.606, 263.727, 0], + "to": [1.325, -1.619, 0], + "ti": [-1.185, 1.356, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 12, + "s": [309.304, 259.281, 0], + "to": [1.185, -1.356, 0], + "ti": [-1.147, 1.074, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 13, + "s": [312.714, 255.59, 0], + "to": [1.147, -1.074, 0], + "ti": [-1.205, 0.459, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 14, + "s": [316.183, 252.839, 0], + "to": [1.205, -0.459, 0], + "ti": [-0.955, -0.508, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 15, + "s": [319.947, 252.839, 0], + "to": [0.955, 0.508, 0], + "ti": [-0.499, -1.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [321.913, 255.888, 0], + "to": [0.499, 1.03, 0], + "ti": [-0.292, -1.003, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [322.944, 259.018, 0], + "to": [0.292, 1.003, 0], + "ti": [-0.216, -0.921, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [323.663, 261.908, 0], + "to": [0.216, 0.921, 0], + "ti": [-0.18, -0.838, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [324.24, 264.543, 0], + "to": [0.18, 0.838, 0], + "ti": [-0.16, -0.762, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [324.742, 266.939, 0], + "to": [0.16, 0.762, 0], + "ti": [-0.149, -0.692, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [325.202, 269.115, 0], + "to": [0.149, 0.692, 0], + "ti": [-0.143, -0.628, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [325.638, 271.093, 0], + "to": [0.143, 0.628, 0], + "ti": [-0.139, -0.568, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [326.06, 272.884, 0], + "to": [0.139, 0.568, 0], + "ti": [-0.136, -0.513, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [326.472, 274.503, 0], + "to": [0.136, 0.513, 0], + "ti": [-0.134, -0.461, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 25, + "s": [326.877, 275.962, 0], + "to": [0.134, 0.461, 0], + "ti": [-0.131, -0.413, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 26, + "s": [327.274, 277.271, 0], + "to": [0.131, 0.413, 0], + "ti": [-0.128, -0.369, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 27, + "s": [327.663, 278.442, 0], + "to": [0.128, 0.369, 0], + "ti": [-0.123, -0.327, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 28, + "s": [328.039, 279.483, 0], + "to": [0.123, 0.327, 0], + "ti": [-0.117, -0.287, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 29, + "s": [328.401, 280.402, 0], + "to": [0.117, 0.287, 0], + "ti": [-0.109, -0.251, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 30, + "s": [328.742, 281.208, 0], + "to": [0.109, 0.251, 0], + "ti": [-0.095, -0.217, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 31, + "s": [329.057, 281.906, 0], + "to": [0.095, 0.217, 0], + "ti": [-0.065, -0.188, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 32, + "s": [329.315, 282.507, 0], + "to": [0.065, 0.188, 0], + "ti": [-0.024, -0.165, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 33, + "s": [329.447, 283.036, 0], + "to": [0.024, 0.165, 0], + "ti": [0.014, -0.145, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 34, + "s": [329.46, 283.5, 0], + "to": [-0.014, 0.145, 0], + "ti": [0.05, -0.126, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 35, + "s": [329.361, 283.904, 0], + "to": [-0.05, 0.126, 0], + "ti": [0.083, -0.109, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 36, + "s": [329.16, 284.255, 0], + "to": [-0.083, 0.109, 0], + "ti": [0.113, -0.092, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 37, + "s": [328.864, 284.555, 0], + "to": [-0.113, 0.092, 0], + "ti": [0.14, -0.078, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 38, + "s": [328.482, 284.81, 0], + "to": [-0.14, 0.078, 0], + "ti": [0.165, -0.064, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 39, + "s": [328.022, 285.021, 0], + "to": [-0.165, 0.064, 0], + "ti": [0.187, -0.05, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 40, + "s": [327.492, 285.191, 0], + "to": [-0.187, 0.05, 0], + "ti": [0.206, -0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 41, + "s": [326.902, 285.323, 0], + "to": [-0.206, 0.038, 0], + "ti": [0.222, -0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 42, + "s": [326.259, 285.418, 0], + "to": [-0.222, 0.026, 0], + "ti": [0.235, -0.015, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 43, + "s": [325.573, 285.479, 0], + "to": [-0.235, 0.015, 0], + "ti": [0.245, -0.007, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 44, + "s": [324.851, 285.506, 0], + "to": [-0.245, 0.007, 0], + "ti": [0.251, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 45, + "s": [324.104, 285.522, 0], + "to": [-0.251, 0.008, 0], + "ti": [0.255, -0.011, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 46, + "s": [323.342, 285.551, 0], + "to": [-0.255, 0.011, 0], + "ti": [0.256, -0.015, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 47, + "s": [322.574, 285.591, 0], + "to": [-0.256, 0.015, 0], + "ti": [0.254, -0.018, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 48, + "s": [321.808, 285.64, 0], + "to": [-0.254, 0.018, 0], + "ti": [0.248, -0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 49, + "s": [321.053, 285.698, 0], + "to": [-0.248, 0.02, 0], + "ti": [0.24, -0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 50, + "s": [320.318, 285.762, 0], + "to": [-0.24, 0.022, 0], + "ti": [0.229, -0.023, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 51, + "s": [319.612, 285.831, 0], + "to": [-0.229, 0.023, 0], + "ti": [0.214, -0.024, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 52, + "s": [318.945, 285.902, 0], + "to": [-0.214, 0.024, 0], + "ti": [0.197, -0.024, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 53, + "s": [318.326, 285.973, 0], + "to": [-0.197, 0.024, 0], + "ti": [0.176, -0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 54, + "s": [317.764, 286.043, 0], + "to": [-0.176, 0.022, 0], + "ti": [0.153, -0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 55, + "s": [317.268, 286.108, 0], + "to": [-0.153, 0.02, 0], + "ti": [0.126, -0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.857 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 56, + "s": [316.848, 286.165, 0], + "to": [-0.126, 0.017, 0], + "ti": [0.096, -0.013, 0] + }, + { + "i": { "x": 0.833, "y": 0.87 }, + "o": { "x": 0.167, "y": 0.2 }, + "t": 57, + "s": [316.513, 286.212, 0], + "to": [-0.096, 0.013, 0], + "ti": [0.062, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.232 }, + "t": 58, + "s": [316.273, 286.245, 0], + "to": [-0.062, 0.008, 0], + "ti": [0.022, -0.003, 0] + }, + { "t": 59, "s": [316.139, 286.261, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.112, 0.057, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 4, + "s": [102.583, 113.906, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.982, 0.964, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.048, 0.091, 0] }, + "t": 5, + "s": [89.34, 107.749, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.826, 0.789, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.023, -0.063, 0] }, + "t": 6, + "s": [120.4, 44.201, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.974, 0.965, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.16, 0.138, 0] }, + "t": 7, + "s": [96.055, 80.415, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.007, 0.953, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.038, -0.061, 0] }, + "t": 8, + "s": [69.666, 135.77, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.054, 1.124, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, -0.107, 0] }, + "t": 9, + "s": [87.726, 103.756, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.958, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.033, 0.05, 0] }, + "t": 10, + "s": [68.046, 117.794, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.847, 0.448, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.085, -0.418, 0] }, + "t": 11, + "s": [100.548, 82.836, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.184, 0.098, 0] }, + "t": 12, + "s": [84.441, 88.646, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.653, 0.719, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.581, -0.033, 0] }, + "t": 13, + "s": [71.053, 121.348, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 0.925, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, 0.118, 0] }, + "t": 14, + "s": [68.813, 98.016, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.876, -0.382, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.52, -0.749, 0] }, + "t": 15, + "s": [115.484, 42.548, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.015, 0.928, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.255, 0.089, 0] }, + "t": 16, + "s": [109.038, 48.103, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.942, 0.908, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, -0.516, 0] }, + "t": 17, + "s": [105.912, 134.682, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, -0.015, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.189, 0.903, 0] }, + "t": 18, + "s": [70.98, 122.635, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.191, 0.613, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.021, 0.091, 0] }, + "t": 19, + "s": [81.664, 121.409, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.88, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, 0.106, 0] }, + "t": 20, + "s": [73.094, 107.712, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.105, 1.007, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.271, -0.001, 0] }, + "t": 21, + "s": [101.314, 57.875, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.034, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.046, 0.006, 0] }, + "t": 22, + "s": [113.878, 107.014, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.024, 1.786, 0] }, + "t": 23, + "s": [85.547, 53.745, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.812, -0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.094, -0.086, 0] }, + "t": 24, + "s": [125.423, 51.139, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 0.814, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.149, 0.087, 0] }, + "t": 25, + "s": [106.714, 52.421, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, 0.151, 0] }, + "t": 26, + "s": [83.118, 81.524, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.571, 1.517, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.689, 0.542, 0] }, + "t": 27, + "s": [112.603, 117.515, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.176, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.103, 0.072, 0] }, + "t": 28, + "s": [109.423, 124.06, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.971, 0.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.057, -0.391, 0] }, + "t": 29, + "s": [96.227, 76.928, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.758, 5.317, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.044, 1.133, 0] }, + "t": 30, + "s": [137.222, 85.21, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.901, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.127, 0.082, 0] }, + "t": 31, + "s": [110.401, 85.868, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.016, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.527, -0.056, 0] }, + "t": 32, + "s": [59.435, 51.153, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.802, 1.05, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.013, -0.013, 0] }, + "t": 33, + "s": [49.857, 71.912, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.11, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.144, 0.031, 0] }, + "t": 34, + "s": [61.259, 54.038, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 0.88, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.047, -0.059, 0] }, + "t": 35, + "s": [76.982, 82.665, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 1.149, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.103, 0.274, 0] }, + "t": 36, + "s": [40.562, 65.859, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.016, 1.039, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.187, 0.053, 0] }, + "t": 37, + "s": [56.885, 58.517, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.025, 0.918, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.013, 0.027, 0] }, + "t": 38, + "s": [70.044, 78.995, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.03, 2.634, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.019, -7.024, 0] }, + "t": 39, + "s": [54.364, 48.853, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.85, 0.699, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.022, 0.079, 0] }, + "t": 40, + "s": [74.752, 49.207, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.102, 1.073, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.188, 0.115, 0] }, + "t": 41, + "s": [46.926, 41.924, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.008, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.046, 0.039, 0] }, + "t": 42, + "s": [24.667, 22.936, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.923, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.008, -0.041, 0] }, + "t": 43, + "s": [74.072, 58.487, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.782, 0.823, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.08, -0.204, 0] }, + "t": 44, + "s": [19.734, 34.651, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.772, 1.167, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, 0.158, 0] }, + "t": 45, + "s": [23.626, 41.571, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.128, 1.109, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.131, 0.056, 0] }, + "t": 46, + "s": [29.896, 49.314, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.837, 1.026, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.05, 0.047, 0] }, + "t": 47, + "s": [40.776, 26.063, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 0.975, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.171, 0.02, 0] }, + "t": 48, + "s": [13.174, 79.764, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.928, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.153, -0.036, 0] }, + "t": 49, + "s": [-13.177, 9.252, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.831, 0.665, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.32, -0.508, 0] }, + "t": 50, + "s": [-3.882, 58.452, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.879, 0.883, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.076, 0.111, 0] }, + "t": 51, + "s": [-5.803, 51.522, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.861, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.266, 0.29, 0] }, + "t": 52, + "s": [15.263, 30.594, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.125, 2.138, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.208, -0.398, 0] }, + "t": 53, + "s": [24.861, 22.138, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.882, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.05, 0.078, 0] }, + "t": 54, + "s": [31.285, 23.603, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.155, 1.18, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.282, -0.051, 0] }, + "t": 55, + "s": [15.205, 2.136, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.018, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 0.057, 0] }, + "t": 56, + "s": [8.46, 15.435, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.07, 2.225, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.015, 0.737, 0] }, + "t": 57, + "s": [27.717, -26.636, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.078, 0] }, + "t": 58, + "s": [4.398, -31.997, 100] + }, + { "t": 59, "s": [47.278, 52.184, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167325382607, 0.716982433843, 1, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 4, + "op": 60, + "st": 4, + "bm": 0 + }, + { + "ddd": 0, + "ind": 18, + "ty": 4, + "nm": "Shape Layer 34", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 15, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 37, + "s": [100] + }, + { "t": 53, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.622 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 10, + "s": [271.252, 303.813, 0], + "to": [0.284, -0.193, 0], + "ti": [-1.149, 1.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.767 }, + "o": { "x": 0.167, "y": 0.107 }, + "t": 11, + "s": [272.957, 302.654, 0], + "to": [1.149, -1.055, 0], + "ti": [-2.022, 2.73, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.13 }, + "t": 12, + "s": [278.144, 297.481, 0], + "to": [2.022, -2.73, 0], + "ti": [-1.91, 4.187, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 13, + "s": [285.092, 286.273, 0], + "to": [1.91, -4.187, 0], + "ti": [-1.055, 4.438, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 14, + "s": [289.604, 272.358, 0], + "to": [1.055, -4.438, 0], + "ti": [-0.359, 3.914, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 15, + "s": [291.42, 259.644, 0], + "to": [0.359, -3.914, 0], + "ti": [0.022, 3.308, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 16, + "s": [291.76, 248.874, 0], + "to": [-0.022, -3.308, 0], + "ti": [0.239, 2.795, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 17, + "s": [291.291, 239.797, 0], + "to": [-0.239, -2.795, 0], + "ti": [0.374, 2.38, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 18, + "s": [290.325, 232.102, 0], + "to": [-0.374, -2.38, 0], + "ti": [0.463, 2.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 19, + "s": [289.046, 225.517, 0], + "to": [-0.463, -2.046, 0], + "ti": [0.527, 1.772, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 20, + "s": [287.548, 219.827, 0], + "to": [-0.527, -1.772, 0], + "ti": [0.577, 1.542, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [285.886, 214.884, 0], + "to": [-0.577, -1.542, 0], + "ti": [0.62, 1.344, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [284.087, 210.573, 0], + "to": [-0.62, -1.344, 0], + "ti": [0.662, 1.168, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [282.165, 206.818, 0], + "to": [-0.662, -1.168, 0], + "ti": [0.709, 1.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [280.115, 203.564, 0], + "to": [-0.709, -1.006, 0], + "ti": [0.773, 0.841, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 25, + "s": [277.909, 200.78, 0], + "to": [-0.773, -0.841, 0], + "ti": [0.882, 0.613, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 26, + "s": [275.475, 198.518, 0], + "to": [-0.882, -0.613, 0], + "ti": [0.968, 0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 27, + "s": [272.616, 197.104, 0], + "to": [-0.968, -0.094, 0], + "ti": [0.794, -0.512, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 28, + "s": [269.666, 197.956, 0], + "to": [-0.794, 0.512, 0], + "ti": [0.517, -0.748, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [267.851, 200.177, 0], + "to": [-0.517, 0.748, 0], + "ti": [0.389, -0.735, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 30, + "s": [266.566, 202.443, 0], + "to": [-0.389, 0.735, 0], + "ti": [0.329, -0.691, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 31, + "s": [265.514, 204.588, 0], + "to": [-0.329, 0.691, 0], + "ti": [0.293, -0.642, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 32, + "s": [264.591, 206.588, 0], + "to": [-0.293, 0.642, 0], + "ti": [0.267, -0.593, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [263.756, 208.44, 0], + "to": [-0.267, 0.593, 0], + "ti": [0.245, -0.545, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 34, + "s": [262.99, 210.145, 0], + "to": [-0.245, 0.545, 0], + "ti": [0.226, -0.497, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 35, + "s": [262.283, 211.707, 0], + "to": [-0.226, 0.497, 0], + "ti": [0.206, -0.451, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 36, + "s": [261.635, 213.129, 0], + "to": [-0.206, 0.451, 0], + "ti": [0.186, -0.406, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 37, + "s": [261.046, 214.413, 0], + "to": [-0.186, 0.406, 0], + "ti": [0.164, -0.36, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 38, + "s": [260.52, 215.562, 0], + "to": [-0.164, 0.36, 0], + "ti": [0.14, -0.315, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 39, + "s": [260.062, 216.575, 0], + "to": [-0.14, 0.315, 0], + "ti": [0.114, -0.269, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 40, + "s": [259.679, 217.45, 0], + "to": [-0.114, 0.269, 0], + "ti": [0.086, -0.224, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 41, + "s": [259.376, 218.188, 0], + "to": [-0.086, 0.224, 0], + "ti": [0.055, -0.178, 0] + }, + { + "i": { "x": 0.833, "y": 0.86 }, + "o": { "x": 0.167, "y": 0.194 }, + "t": 42, + "s": [259.162, 218.791, 0], + "to": [-0.055, 0.178, 0], + "ti": [0.022, -0.132, 0] + }, + { + "i": { "x": 0.833, "y": 0.862 }, + "o": { "x": 0.167, "y": 0.205 }, + "t": 43, + "s": [259.045, 219.258, 0], + "to": [-0.022, 0.132, 0], + "ti": [-0.015, -0.086, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.21 }, + "t": 44, + "s": [259.032, 219.585, 0], + "to": [0.015, 0.086, 0], + "ti": [-0.054, -0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.802 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 45, + "s": [259.133, 219.772, 0], + "to": [0.054, 0.038, 0], + "ti": [-0.089, -0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.818 }, + "o": { "x": 0.167, "y": 0.144 }, + "t": 46, + "s": [259.355, 219.813, 0], + "to": [0.089, 0.002, 0], + "ti": [-0.114, 0.012, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 47, + "s": [259.669, 219.787, 0], + "to": [0.114, -0.012, 0], + "ti": [-0.131, 0.018, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.157 }, + "t": 48, + "s": [260.041, 219.743, 0], + "to": [0.131, -0.018, 0], + "ti": [-0.144, 0.024, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 49, + "s": [260.458, 219.681, 0], + "to": [0.144, -0.024, 0], + "ti": [-0.153, 0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 50, + "s": [260.907, 219.601, 0], + "to": [0.153, -0.025, 0], + "ti": [-0.159, 0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 51, + "s": [261.377, 219.531, 0], + "to": [0.159, -0.017, 0], + "ti": [-0.161, 0.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 52, + "s": [261.86, 219.498, 0], + "to": [0.161, -0.006, 0], + "ti": [-0.161, -0.005, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 53, + "s": [262.346, 219.497, 0], + "to": [0.161, 0.005, 0], + "ti": [-0.157, -0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 54, + "s": [262.825, 219.527, 0], + "to": [0.157, 0.014, 0], + "ti": [-0.151, -0.023, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 55, + "s": [263.289, 219.583, 0], + "to": [0.151, 0.023, 0], + "ti": [-0.142, -0.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 56, + "s": [263.73, 219.663, 0], + "to": [0.142, 0.03, 0], + "ti": [-0.132, -0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 57, + "s": [264.142, 219.763, 0], + "to": [0.132, 0.036, 0], + "ti": [-0.119, -0.041, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 58, + "s": [264.519, 219.88, 0], + "to": [0.119, 0.041, 0], + "ti": [-0.056, -0.022, 0] + }, + { "t": 59, "s": [264.857, 220.011, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.023, -0.027, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 10, + "s": [92.348, 80.588, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.063, 0.897, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.018, 0.091, 0] }, + "t": 11, + "s": [63.239, 83.148, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.953, 1.468, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.036, 0.435, 0] }, + "t": 12, + "s": [100.528, 112.151, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.799, 0.83, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.11, 0.071, 0] }, + "t": 13, + "s": [34.84, 119.029, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.908, 1.046, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.142, 0.163, 0] }, + "t": 14, + "s": [63.172, 73.511, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.12, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.917, 0.03, 0] }, + "t": 15, + "s": [103.227, 26.126, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.04, -2.324, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.049, 10.207, 0] }, + "t": 16, + "s": [107.23, 99.638, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.987, 0.97, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, 0.085, 0] }, + "t": 17, + "s": [97.456, 100.244, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.007, 0.792, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.016, -0.047, 0] }, + "t": 18, + "s": [111.909, 123.776, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.079, 0.895, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, 0.139, 0] }, + "t": 19, + "s": [99.739, 108.689, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, 0.438, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 0.401, 0] }, + "t": 20, + "s": [112.92, 86.203, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.27, 0.904, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.304, 0.098, 0] }, + "t": 21, + "s": [87.298, 80.298, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.89, 1.161, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, 0.638, 0] }, + "t": 22, + "s": [77.606, 46.38, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.303, 0.905, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.348, 0.055, 0] }, + "t": 23, + "s": [118.751, 41.284, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, -2.246, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.065, 0.688, 0] }, + "t": 24, + "s": [131.696, 56.225, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.997, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.244, 0.086, 0] }, + "t": 25, + "s": [71.627, 58.284, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 0.56, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.003, -1.183, 0] }, + "t": 26, + "s": [86.93, 136.413, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.554, 0.858, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.032, 0.103, 0] }, + "t": 27, + "s": [72.183, 131.272, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.904, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.102, 0.202, 0] }, + "t": 28, + "s": [82.81, 109.279, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.416, 0.998, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.64, -0.034, 0] }, + "t": 29, + "s": [129.066, 93.807, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.845, 0.765, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, -0.002, 0] }, + "t": 30, + "s": [135.997, 104.839, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.974, 0.903, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.18, 0.129, 0] }, + "t": 31, + "s": [94.456, 94.071, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.873, 1.617, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.038, 0.599, 0] }, + "t": 32, + "s": [58.778, 74.421, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.889, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.243, 0.073, 0] }, + "t": 33, + "s": [83.328, 71.244, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.695, 0.802, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.338, -0.134, 0] }, + "t": 34, + "s": [96.122, 97.929, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.062, 1.055, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, 0.144, 0] }, + "t": 35, + "s": [100.314, 87.693, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.795, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.036, 0.033, 0] }, + "t": 36, + "s": [111.459, 73.549, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.993, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, -0.002, 0] }, + "t": 37, + "s": [91.979, 97.003, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.87, 1.251, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.007, 0.447, 0] }, + "t": 38, + "s": [63.62, 73.964, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.09, 1.06, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.232, 0.063, 0] }, + "t": 39, + "s": [89.728, 68.683, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.043, 0.035, 0] }, + "t": 40, + "s": [104.347, 89.888, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 1.034, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.032, 0, 0] }, + "t": 41, + "s": [74.014, 53.405, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.81, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.02, 0.024, 0] }, + "t": 42, + "s": [95.84, 90.08, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.816, 0.763, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.148, -0.184, 0] }, + "t": 43, + "s": [78.32, 38.425, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.899, 0.993, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.152, 0.129, 0] }, + "t": 44, + "s": [55.867, 54.538, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.701, 0.99, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.487, -0.007, 0] }, + "t": 45, + "s": [28.81, 84.258, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.904, 1.154, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, -0.011, 0] }, + "t": 46, + "s": [23.23, 56.921, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.701, 0.959, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.611, 0.054, 0] }, + "t": 47, + "s": [8.759, 81.032, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.089, 0.935, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.116, -0.083, 0] }, + "t": 48, + "s": [6.473, 12.233, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.758, 1.033, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.043, -0.293, 0] }, + "t": 49, + "s": [0.558, 46.8, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 1.273, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.127, 0.023, 0] }, + "t": 50, + "s": [12.808, 39.141, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 0.953, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.02, 0.064, 0] }, + "t": 51, + "s": [36.176, 49.79, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.954, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.242, -0.11, 0] }, + "t": 52, + "s": [17.41, 4.217, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.67, 0.939, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.224, -0.102, 0] }, + "t": 53, + "s": [22.21, 23.867, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.825, 1.394, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.112, -0.223, 0] }, + "t": 54, + "s": [25.048, 15.014, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.216, 0.678, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.159, 0.069, 0] }, + "t": 55, + "s": [33.433, 17.425, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.985, 1.08, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.06, 0.112, 0] }, + "t": 56, + "s": [42.612, 3.611, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.012, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.019, 0.041, 0] }, + "t": 57, + "s": [9.673, -36.008, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.01, -0.68, 0] }, + "t": 58, + "s": [36.625, 41.5, 100] + }, + { "t": 59, "s": [5.886, 33.044, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.791173718022, 0.019608000213, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 10, + "op": 60, + "st": 10, + "bm": 0 + }, + { + "ddd": 0, + "ind": 19, + "ty": 4, + "nm": "Shape Layer 33", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 1, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 6, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 28, + "s": [100] + }, + { "t": 44, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.635 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 1, + "s": [270.415, 303.961, 0], + "to": [0.303, -0.268, 0], + "ti": [-1.389, 1.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.798 }, + "o": { "x": 0.167, "y": 0.108 }, + "t": 2, + "s": [272.233, 302.354, 0], + "to": [1.389, -1.063, 0], + "ti": [-2.915, 0.504, 0] + }, + { + "i": { "x": 0.833, "y": 0.803 }, + "o": { "x": 0.167, "y": 0.142 }, + "t": 3, + "s": [278.751, 297.585, 0], + "to": [2.915, -0.504, 0], + "ti": [-1.552, -2.903, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.144 }, + "t": 4, + "s": [289.724, 299.332, 0], + "to": [1.552, 2.903, 0], + "ti": [0.807, -4.867, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 5, + "s": [288.065, 315.004, 0], + "to": [-0.807, 4.867, 0], + "ti": [1.017, -4.14, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 6, + "s": [284.884, 328.537, 0], + "to": [-1.017, 4.14, 0], + "ti": [0.905, -3.485, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 7, + "s": [281.965, 339.842, 0], + "to": [-0.905, 3.485, 0], + "ti": [0.776, -2.987, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 8, + "s": [279.455, 349.449, 0], + "to": [-0.776, 2.987, 0], + "ti": [0.667, -2.607, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 9, + "s": [277.308, 357.764, 0], + "to": [-0.667, 2.607, 0], + "ti": [0.578, -2.312, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 10, + "s": [275.455, 365.094, 0], + "to": [-0.578, 2.312, 0], + "ti": [0.505, -2.074, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 11, + "s": [273.842, 371.638, 0], + "to": [-0.505, 2.074, 0], + "ti": [0.444, -1.876, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 12, + "s": [272.427, 377.536, 0], + "to": [-0.444, 1.876, 0], + "ti": [0.393, -1.708, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 13, + "s": [271.178, 382.891, 0], + "to": [-0.393, 1.708, 0], + "ti": [0.349, -1.562, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 14, + "s": [270.071, 387.781, 0], + "to": [-0.349, 1.562, 0], + "ti": [0.31, -1.434, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 15, + "s": [269.086, 392.264, 0], + "to": [-0.31, 1.434, 0], + "ti": [0.275, -1.32, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 16, + "s": [268.211, 396.386, 0], + "to": [-0.275, 1.32, 0], + "ti": [0.243, -1.215, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 17, + "s": [267.436, 400.181, 0], + "to": [-0.243, 1.215, 0], + "ti": [0.213, -1.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 18, + "s": [266.752, 403.676, 0], + "to": [-0.213, 1.118, 0], + "ti": [0.185, -1.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 19, + "s": [266.156, 406.891, 0], + "to": [-0.185, 1.028, 0], + "ti": [0.158, -0.941, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [265.642, 409.842, 0], + "to": [-0.158, 0.941, 0], + "ti": [0.131, -0.859, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [265.209, 412.54, 0], + "to": [-0.131, 0.859, 0], + "ti": [0.105, -0.779, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [264.855, 414.996, 0], + "to": [-0.105, 0.779, 0], + "ti": [0.078, -0.702, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 23, + "s": [264.581, 417.216, 0], + "to": [-0.078, 0.702, 0], + "ti": [0.051, -0.625, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 24, + "s": [264.386, 419.205, 0], + "to": [-0.051, 0.625, 0], + "ti": [0.024, -0.55, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 25, + "s": [264.272, 420.968, 0], + "to": [-0.024, 0.55, 0], + "ti": [-0.004, -0.475, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 26, + "s": [264.241, 422.506, 0], + "to": [0.004, 0.475, 0], + "ti": [-0.032, -0.401, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 27, + "s": [264.295, 423.82, 0], + "to": [0.032, 0.401, 0], + "ti": [-0.062, -0.326, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 28, + "s": [264.435, 424.912, 0], + "to": [0.062, 0.326, 0], + "ti": [-0.092, -0.251, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 29, + "s": [264.666, 425.779, 0], + "to": [0.092, 0.251, 0], + "ti": [-0.123, -0.178, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 30, + "s": [264.99, 426.419, 0], + "to": [0.123, 0.178, 0], + "ti": [-0.144, -0.125, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 31, + "s": [265.403, 426.848, 0], + "to": [0.144, 0.125, 0], + "ti": [-0.154, -0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 32, + "s": [265.856, 427.168, 0], + "to": [0.154, 0.094, 0], + "ti": [-0.158, -0.068, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 33, + "s": [266.328, 427.409, 0], + "to": [0.158, 0.068, 0], + "ti": [-0.158, -0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 34, + "s": [266.806, 427.579, 0], + "to": [0.158, 0.046, 0], + "ti": [-0.155, -0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 35, + "s": [267.278, 427.686, 0], + "to": [0.155, 0.026, 0], + "ti": [-0.148, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 36, + "s": [267.736, 427.736, 0], + "to": [0.148, 0.008, 0], + "ti": [-0.139, 0.007, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 37, + "s": [268.169, 427.736, 0], + "to": [0.139, -0.007, 0], + "ti": [-0.127, 0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 38, + "s": [268.571, 427.692, 0], + "to": [0.127, -0.022, 0], + "ti": [-0.114, 0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 39, + "s": [268.934, 427.607, 0], + "to": [0.114, -0.034, 0], + "ti": [-0.098, 0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 40, + "s": [269.252, 427.486, 0], + "to": [0.098, -0.046, 0], + "ti": [-0.081, 0.051, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 41, + "s": [269.522, 427.333, 0], + "to": [0.081, -0.051, 0], + "ti": [-0.064, 0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.858 }, + "o": { "x": 0.167, "y": 0.191 }, + "t": 42, + "s": [269.74, 427.18, 0], + "to": [0.064, -0.046, 0], + "ti": [-0.047, 0.035, 0] + }, + { + "i": { "x": 0.833, "y": 0.868 }, + "o": { "x": 0.167, "y": 0.202 }, + "t": 43, + "s": [269.907, 427.059, 0], + "to": [0.047, -0.035, 0], + "ti": [-0.029, 0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.882 }, + "o": { "x": 0.167, "y": 0.227 }, + "t": 44, + "s": [270.02, 426.97, 0], + "to": [0.029, -0.025, 0], + "ti": [-0.011, 0.015, 0] + }, + { + "i": { "x": 0.833, "y": 0.799 }, + "o": { "x": 0.167, "y": 0.281 }, + "t": 45, + "s": [270.079, 426.911, 0], + "to": [0.011, -0.015, 0], + "ti": [0.007, 0.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.748 }, + "o": { "x": 0.167, "y": 0.142 }, + "t": 46, + "s": [270.083, 426.879, 0], + "to": [-0.007, -0.006, 0], + "ti": [0.025, -0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.791 }, + "o": { "x": 0.167, "y": 0.125 }, + "t": 47, + "s": [270.035, 426.873, 0], + "to": [-0.025, 0.002, 0], + "ti": [0.041, -0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.808 }, + "o": { "x": 0.167, "y": 0.139 }, + "t": 48, + "s": [269.935, 426.889, 0], + "to": [-0.041, 0.009, 0], + "ti": [0.056, -0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.816 }, + "o": { "x": 0.167, "y": 0.147 }, + "t": 49, + "s": [269.788, 426.925, 0], + "to": [-0.056, 0.014, 0], + "ti": [0.07, -0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.822 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 50, + "s": [269.597, 426.976, 0], + "to": [-0.07, 0.019, 0], + "ti": [0.082, -0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 51, + "s": [269.367, 427.038, 0], + "to": [-0.082, 0.022, 0], + "ti": [0.092, -0.023, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 52, + "s": [269.104, 427.106, 0], + "to": [-0.092, 0.023, 0], + "ti": [0.099, -0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 53, + "s": [268.815, 427.175, 0], + "to": [-0.099, 0.022, 0], + "ti": [0.104, -0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 54, + "s": [268.508, 427.24, 0], + "to": [-0.104, 0.02, 0], + "ti": [0.105, -0.015, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 55, + "s": [268.192, 427.293, 0], + "to": [-0.105, 0.015, 0], + "ti": [0.103, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 56, + "s": [267.876, 427.329, 0], + "to": [-0.103, 0.008, 0], + "ti": [0.098, 0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 57, + "s": [267.571, 427.341, 0], + "to": [-0.098, -0.002, 0], + "ti": [0.088, 0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 58, + "s": [267.289, 427.32, 0], + "to": [-0.088, -0.014, 0], + "ti": [0.041, 0.01, 0] + }, + { "t": 59, "s": [267.042, 427.258, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.161, 0.992, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 1, + "s": [88.706, 125.309, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.987, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, -0.009, 0] }, + "t": 2, + "s": [101.05, 65.647, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.822, 0.862, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.015, -0.05, 0] }, + "t": 3, + "s": [64.822, 119.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.03, 1.194, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.156, 0.21, 0] }, + "t": 4, + "s": [95.37, 85.974, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.022, 0.058, 0] }, + "t": 5, + "s": [130.225, 63.782, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.866, 0.793, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.229, -0.185, 0] }, + "t": 6, + "s": [82.767, 137.754, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.05, 0.961, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.219, 0.139, 0] }, + "t": 7, + "s": [95.438, 114.769, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.544, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.031, -0.072, 0] }, + "t": 8, + "s": [103.2, 80.591, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.032, 0.895, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.102, 0.224, 0] }, + "t": 9, + "s": [90.818, 98.938, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.336, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.023, 0.402, 0] }, + "t": 10, + "s": [35.459, 109.792, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.842, 1.105, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.056, 0.095, 0] }, + "t": 11, + "s": [111.828, 112.627, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.085, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.176, 0.046, 0] }, + "t": 12, + "s": [66.113, 132.396, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.924, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.042, 0.248, 0] }, + "t": 13, + "s": [25.062, 87.733, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.884, 1.494, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.328, -0.831, 0] }, + "t": 14, + "s": [107.997, 65.085, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.34, 1.282, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.298, 0.071, 0] }, + "t": 15, + "s": [91.212, 67.15, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, 0.947, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, 0.064, 0] }, + "t": 16, + "s": [84.699, 52.844, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.04, 0.928, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-2.065, -0.147, 0] }, + "t": 17, + "s": [117.811, 115.589, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.695, 1.984, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, -0.553, 0] }, + "t": 18, + "s": [116.527, 92.87, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.902, 0.923, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, 0.077, 0] }, + "t": 19, + "s": [118.433, 95.846, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.407, 0.784, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.556, -0.959, 0] }, + "t": 20, + "s": [77.764, 57.746, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.863, 0.619, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 0.136, 0] }, + "t": 21, + "s": [70.59, 60.792, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.073, 1.124, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.213, 0.107, 0] }, + "t": 22, + "s": [112.827, 65.643, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.871, 1.062, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.039, 0.05, 0] }, + "t": 23, + "s": [139.959, 82.972, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.858, 0.887, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.235, 0.036, 0] }, + "t": 24, + "s": [89.044, 39.953, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.03, 1.025, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.202, 0.321, 0] }, + "t": 25, + "s": [61.106, 115.024, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 0.861, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.022, 0.019, 0] }, + "t": 26, + "s": [41.52, 141.346, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.086, 0.818, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.674, 0.209, 0] }, + "t": 27, + "s": [68.262, 107.246, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 0.94, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.077, 0.154, 0] }, + "t": 28, + "s": [65.317, 84.613, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.919, 1.127, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.001, -0.216, 0] }, + "t": 29, + "s": [106.651, 57.805, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-3.288, 0.05, 0] }, + "t": 30, + "s": [66.005, 65.265, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-1.723, 0.574, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.143, -0.241, 0] }, + "t": 31, + "s": [67.009, 46.429, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 1.067, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.086, 0.104, 0] }, + "t": 32, + "s": [66.639, 51.274, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.778, 0.921, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, 0.037, 0] }, + "t": 33, + "s": [54.923, 71.216, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.071, 0.741, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.133, -1.444, 0] }, + "t": 34, + "s": [65.427, 35.22, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.878, 1.091, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.123, 0] }, + "t": 35, + "s": [82.893, 37.183, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.906, 0.828, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.264, 0.043, 0] }, + "t": 36, + "s": [50.525, 41.333, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.063, 1.344, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.747, 0.162, 0] }, + "t": 37, + "s": [35.563, 32.66, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.889, 1.002, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.077, 0.067, 0] }, + "t": 38, + "s": [33.685, 23.422, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.055, 0.924, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.331, 0.002, 0] }, + "t": 39, + "s": [59.517, 70.825, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 1.608, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.033, -0.9, 0] }, + "t": 40, + "s": [68.226, 22.181, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.215, 0.945, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.055, 0.073, 0] }, + "t": 41, + "s": [53.746, 26.302, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.832, 0.514, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.06, -0.163, 0] }, + "t": 42, + "s": [62.499, -7.882, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.925, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.166, 0.101, 0] }, + "t": 43, + "s": [31.128, 3.701, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.261, 0.975, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.72, -0.052, 0] }, + "t": 44, + "s": [-0.586, 59.702, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.131, 1.044, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.063, -0.035, 0] }, + "t": 45, + "s": [2.703, 25.328, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, 0.029, 0] }, + "t": 46, + "s": [-10.892, 49.534, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.851, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.242, -0.278, 0] }, + "t": 47, + "s": [24.109, 12.637, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.541, 1.12, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.189, -0.068, 0] }, + "t": 48, + "s": [15.151, 21.155, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.973, 1.225, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.072, 0.049, 0] }, + "t": 49, + "s": [8.06, 16.479, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.881, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.04, 0.061, 0] }, + "t": 50, + "s": [61.168, 27.875, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.037, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.278, -0.07, 0] }, + "t": 51, + "s": [25.413, -14.304, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.927, 1.673, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.026, -0.462, 0] }, + "t": 52, + "s": [10.106, 8.552, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.809, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.597, 0.074, 0] }, + "t": 53, + "s": [32.24, 5.058, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, 0.766, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.148, -0.321, 0] }, + "t": 54, + "s": [29.528, 36.767, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.876, 1.171, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.422, 0.129, 0] }, + "t": 55, + "s": [26.015, 30.226, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.716, 0.961, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.252, 0.056, 0] }, + "t": 56, + "s": [25.151, 18.362, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.719, 0.812, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.118, -0.074, 0] }, + "t": 57, + "s": [24.725, 54.585, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.075, 0.15, 0] }, + "t": 58, + "s": [23.696, 35.402, 100] + }, + { "t": 59, "s": [33.602, 11.392, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 1, + "op": 60, + "st": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 20, + "ty": 4, + "nm": "Shape Layer 32", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 4, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 31, + "s": [100] + }, + { "t": 47, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.569 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 4, + "s": [267.904, 308.221, 0], + "to": [-0.062, -0.384, 0], + "ti": [-0.406, 2.013, 0] + }, + { + "i": { "x": 0.833, "y": 0.761 }, + "o": { "x": 0.167, "y": 0.103 }, + "t": 5, + "s": [267.529, 305.917, 0], + "to": [0.406, -2.013, 0], + "ti": [-2.229, 4.277, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.128 }, + "t": 6, + "s": [270.337, 296.143, 0], + "to": [2.229, -4.277, 0], + "ti": [-4.056, 5.365, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 7, + "s": [280.902, 280.252, 0], + "to": [4.056, -5.365, 0], + "ti": [-4.394, 5.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 8, + "s": [294.676, 263.955, 0], + "to": [4.394, -5.019, 0], + "ti": [-3.868, 4.214, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 9, + "s": [307.264, 250.141, 0], + "to": [3.868, -4.214, 0], + "ti": [-3.257, 3.538, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 10, + "s": [317.883, 238.67, 0], + "to": [3.257, -3.538, 0], + "ti": [-2.752, 3.047, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 11, + "s": [326.809, 228.915, 0], + "to": [2.752, -3.047, 0], + "ti": [-2.349, 2.69, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 12, + "s": [334.394, 220.39, 0], + "to": [2.349, -2.69, 0], + "ti": [-2.023, 2.427, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 13, + "s": [340.902, 212.773, 0], + "to": [2.023, -2.427, 0], + "ti": [-1.753, 2.23, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 14, + "s": [346.531, 205.826, 0], + "to": [1.753, -2.23, 0], + "ti": [-1.519, 2.072, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 15, + "s": [351.417, 199.393, 0], + "to": [1.519, -2.072, 0], + "ti": [-1.306, 1.928, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 16, + "s": [355.644, 193.397, 0], + "to": [1.306, -1.928, 0], + "ti": [-1.106, 1.797, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 17, + "s": [359.255, 187.824, 0], + "to": [1.106, -1.797, 0], + "ti": [-0.913, 1.682, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [362.28, 182.616, 0], + "to": [0.913, -1.682, 0], + "ti": [-0.72, 1.579, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [364.731, 177.73, 0], + "to": [0.72, -1.579, 0], + "ti": [-0.524, 1.479, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [366.601, 173.143, 0], + "to": [0.524, -1.479, 0], + "ti": [-0.321, 1.378, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [367.872, 168.855, 0], + "to": [0.321, -1.378, 0], + "ti": [-0.115, 1.264, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [368.526, 164.876, 0], + "to": [0.115, -1.264, 0], + "ti": [0.083, 1.13, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 23, + "s": [368.561, 161.269, 0], + "to": [-0.083, -1.13, 0], + "ti": [0.254, 0.978, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 24, + "s": [368.028, 158.096, 0], + "to": [-0.254, -0.978, 0], + "ti": [0.382, 0.82, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 25, + "s": [367.038, 155.4, 0], + "to": [-0.382, -0.82, 0], + "ti": [0.464, 0.67, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 26, + "s": [365.735, 153.176, 0], + "to": [-0.464, -0.67, 0], + "ti": [0.506, 0.539, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [364.254, 151.378, 0], + "to": [-0.506, -0.539, 0], + "ti": [0.52, 0.43, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [362.7, 149.94, 0], + "to": [-0.52, -0.43, 0], + "ti": [0.517, 0.343, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 29, + "s": [361.136, 148.795, 0], + "to": [-0.517, -0.343, 0], + "ti": [0.505, 0.273, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 30, + "s": [359.597, 147.883, 0], + "to": [-0.505, -0.273, 0], + "ti": [0.487, 0.216, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 31, + "s": [358.105, 147.16, 0], + "to": [-0.487, -0.216, 0], + "ti": [0.465, 0.169, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 32, + "s": [356.676, 146.589, 0], + "to": [-0.465, -0.169, 0], + "ti": [0.441, 0.132, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 33, + "s": [355.317, 146.143, 0], + "to": [-0.441, -0.132, 0], + "ti": [0.415, 0.101, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 34, + "s": [354.033, 145.799, 0], + "to": [-0.415, -0.101, 0], + "ti": [0.388, 0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [352.827, 145.538, 0], + "to": [-0.388, -0.076, 0], + "ti": [0.36, 0.056, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 36, + "s": [351.704, 145.343, 0], + "to": [-0.36, -0.056, 0], + "ti": [0.33, 0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 37, + "s": [350.668, 145.203, 0], + "to": [-0.33, -0.04, 0], + "ti": [0.298, 0.027, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 38, + "s": [349.724, 145.104, 0], + "to": [-0.298, -0.027, 0], + "ti": [0.263, 0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 39, + "s": [348.882, 145.038, 0], + "to": [-0.263, -0.019, 0], + "ti": [0.227, 0.013, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 40, + "s": [348.144, 144.993, 0], + "to": [-0.227, -0.013, 0], + "ti": [0.189, 0.011, 0] + }, + { + "i": { "x": 0.833, "y": 0.855 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 41, + "s": [347.517, 144.959, 0], + "to": [-0.189, -0.011, 0], + "ti": [0.146, 0.011, 0] + }, + { + "i": { "x": 0.833, "y": 0.865 }, + "o": { "x": 0.167, "y": 0.196 }, + "t": 42, + "s": [347.011, 144.929, 0], + "to": [-0.146, -0.011, 0], + "ti": [0.1, 0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.867 }, + "o": { "x": 0.167, "y": 0.218 }, + "t": 43, + "s": [346.639, 144.893, 0], + "to": [-0.1, -0.014, 0], + "ti": [0.056, 0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.224 }, + "t": 44, + "s": [346.413, 144.843, 0], + "to": [-0.056, -0.022, 0], + "ti": [0.03, 0.033, 0] + }, + { + "i": { "x": 0.833, "y": 0.816 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 45, + "s": [346.304, 144.761, 0], + "to": [-0.03, -0.033, 0], + "ti": [0.031, 0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 46, + "s": [346.234, 144.648, 0], + "to": [-0.031, -0.038, 0], + "ti": [0.045, 0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.82 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 47, + "s": [346.12, 144.534, 0], + "to": [-0.045, -0.038, 0], + "ti": [0.059, 0.037, 0] + }, + { + "i": { "x": 0.833, "y": 0.822 }, + "o": { "x": 0.167, "y": 0.155 }, + "t": 48, + "s": [345.962, 144.422, 0], + "to": [-0.059, -0.037, 0], + "ti": [0.072, 0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.157 }, + "t": 49, + "s": [345.764, 144.313, 0], + "to": [-0.072, -0.036, 0], + "ti": [0.083, 0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 50, + "s": [345.53, 144.207, 0], + "to": [-0.083, -0.034, 0], + "ti": [0.093, 0.033, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 51, + "s": [345.264, 144.107, 0], + "to": [-0.093, -0.033, 0], + "ti": [0.102, 0.031, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 52, + "s": [344.97, 144.011, 0], + "to": [-0.102, -0.031, 0], + "ti": [0.11, 0.029, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 53, + "s": [344.65, 143.922, 0], + "to": [-0.11, -0.029, 0], + "ti": [0.117, 0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 54, + "s": [344.308, 143.839, 0], + "to": [-0.117, -0.026, 0], + "ti": [0.123, 0.024, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 55, + "s": [343.947, 143.764, 0], + "to": [-0.123, -0.024, 0], + "ti": [0.127, 0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 56, + "s": [343.572, 143.695, 0], + "to": [-0.127, -0.022, 0], + "ti": [0.13, 0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 57, + "s": [343.185, 143.634, 0], + "to": [-0.13, -0.019, 0], + "ti": [0.133, 0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 58, + "s": [342.79, 143.581, 0], + "to": [-0.133, -0.017, 0], + "ti": [0.067, 0.008, 0] + }, + { "t": 59, "s": [342.389, 143.535, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.916, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 4, + "s": [146.545, 56.981, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.984, 6.136, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [7.109, 6.416, 0] }, + "t": 5, + "s": [102.654, 113.791, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.082, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.08, 0.082, 0] }, + "t": 6, + "s": [102.133, 114.538, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.769, 0.88, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.041, -0.024, 0] }, + "t": 7, + "s": [115.051, 67.711, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, 0.924, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.13, 0.272, 0] }, + "t": 8, + "s": [89.461, 104.174, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.843, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.029, -0.825, 0] }, + "t": 9, + "s": [44.049, 120.312, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.068, 5.668, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.177, -0.052, 0] }, + "t": 10, + "s": [77.823, 118.832, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.009, 0.967, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.037, 0.082, 0] }, + "t": 11, + "s": [107.747, 119.743, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, 0.945, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.009, -0.054, 0] }, + "t": 12, + "s": [53.479, 67.782, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-1.061, 0.515, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-2.064, -0.16, 0] }, + "t": 13, + "s": [113.921, 99.393, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.981, 1.019, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.087, 0.101, 0] }, + "t": 14, + "s": [111.576, 88.565, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.95, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.025, 0.015, 0] }, + "t": 15, + "s": [55.899, 36.375, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.094, 1.148, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.128, 0.737, 0] }, + "t": 16, + "s": [98.768, 100.4, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.97, 0.816, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, 0.053, 0] }, + "t": 17, + "s": [81.873, 108.568, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.853, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.047, 0.153, 0] }, + "t": 18, + "s": [117.879, 85.877, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.034, 0.862, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.192, -0.017, 0] }, + "t": 19, + "s": [94.849, 58.578, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.781, 0.836, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.024, 0.211, 0] }, + "t": 20, + "s": [77.175, 81.139, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.98, 1.271, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, 0.169, 0] }, + "t": 21, + "s": [102.134, 95.906, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.835, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.026, 0.064, 0] }, + "t": 22, + "s": [142.654, 110.218, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.797, 0.841, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.168, -0.034, 0] }, + "t": 23, + "s": [111.887, 49.352, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.009, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, 0.175, 0] }, + "t": 24, + "s": [81.638, 92.763, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.008, 0.009, 0] }, + "t": 25, + "s": [38.028, 132.048, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.012, 0.82, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.143, 0.392, 0] }, + "t": 26, + "s": [86.128, 88.194, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.088, 0.901, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.011, 0.155, 0] }, + "t": 27, + "s": [68.431, 76.37, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.042, 1.263, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.043, 0.518, 0] }, + "t": 28, + "s": [88.699, 62.632, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.935, 1.037, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.028, 0.063, 0] }, + "t": 29, + "s": [46.98, 59.998, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.851, 1.103, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.298, 0.026, 0] }, + "t": 30, + "s": [109.874, 70.958, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.881, 1.047, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.189, 0.046, 0] }, + "t": 31, + "s": [96.114, 55.137, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.231, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.278, 0.03, 0] }, + "t": 32, + "s": [85.214, 90.54, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.189, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, -0.071, 0] }, + "t": 33, + "s": [80.545, 35.132, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.94, 0.796, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, -0.412, 0] }, + "t": 34, + "s": [98.178, 65.031, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.966, 0.606, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.209, 0.141, 0] }, + "t": 35, + "s": [40.533, 60.003, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 1.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.059, 0.106, 0] }, + "t": 36, + "s": [56.966, 52.732, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.747, 1.016, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.244, 0.016, 0] }, + "t": 37, + "s": [47.335, 25.638, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.818, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.124, 0.014, 0] }, + "t": 38, + "s": [49.783, 59.415, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.061, 0.813, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.154, 0.718, 0] }, + "t": 39, + "s": [54.761, 18.968, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 1.058, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.035, 0.15, 0] }, + "t": 40, + "s": [60.644, 13.657, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.945, 0.618, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.384, 0.034, 0] }, + "t": 41, + "s": [50.471, 7.064, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.973, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.087, 0.107, 0] }, + "t": 42, + "s": [47.647, 18.253, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.927, 0.88, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.04, -0.023, 0] }, + "t": 43, + "s": [-15.426, 58.31, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.52, 0.892, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.604, 0.275, 0] }, + "t": 44, + "s": [27.159, 27.049, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 0.901, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.072, 0.364, 0] }, + "t": 45, + "s": [21.997, 13.425, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.588, 1.135, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.54, 0.54, 0] }, + "t": 46, + "s": [59.347, 9.373, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.055, 1.741, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.104, 0.051, 0] }, + "t": 47, + "s": [54.352, 8.634, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 0.829, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.033, 0.075, 0] }, + "t": 48, + "s": [34.643, 10.569, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.881, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.001, 0.163, 0] }, + "t": 49, + "s": [67.47, -8.566, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, 0.842, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.276, -0.04, 0] }, + "t": 50, + "s": [34.991, -28.664, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.321, 0.639, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.801, 0.176, 0] }, + "t": 51, + "s": [20.908, -15.133, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.876, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.08, 0.108, 0] }, + "t": 52, + "s": [21.531, -2.998, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.331, 0.787, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.256, 0.39, 0] }, + "t": 53, + "s": [3.556, 37.39, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.945, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, 0.137, 0] }, + "t": 54, + "s": [-5.112, 48.357, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.837, 0.83, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.482, -0.165, 0] }, + "t": 55, + "s": [37.958, 65.386, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.163, 0.146, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.171, 0.163, 0] }, + "t": 56, + "s": [40.525, 59.682, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.082, 0.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.093, 0.092, 0] }, + "t": 57, + "s": [42.972, 53.735, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.041, -0.57, 0] }, + "t": 58, + "s": [65.106, -1.291, 100] + }, + { "t": 59, "s": [21.097, 5.723, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.791173718022, 0.019608000213, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 4, + "op": 60, + "st": 4, + "bm": 0 + }, + { + "ddd": 0, + "ind": 21, + "ty": 4, + "nm": "Shape Layer 31", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 5, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 32, + "s": [100] + }, + { "t": 48, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.6 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 5, + "s": [274.616, 306.243, 0], + "to": [-0.115, -0.59, 0], + "ti": [0.824, 2.77, 0] + }, + { + "i": { "x": 0.833, "y": 0.765 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 6, + "s": [273.925, 302.703, 0], + "to": [-0.824, -2.77, 0], + "ti": [2.181, 6.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 7, + "s": [269.674, 289.624, 0], + "to": [-2.181, -6.093, 0], + "ti": [3.267, 8.196, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 8, + "s": [260.838, 266.142, 0], + "to": [-3.267, -8.196, 0], + "ti": [3.485, 7.964, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 9, + "s": [250.074, 240.449, 0], + "to": [-3.485, -7.964, 0], + "ti": [3.198, 6.707, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 10, + "s": [239.929, 218.357, 0], + "to": [-3.198, -6.707, 0], + "ti": [2.853, 5.529, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 11, + "s": [230.887, 200.209, 0], + "to": [-2.853, -5.529, 0], + "ti": [2.563, 4.612, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 12, + "s": [222.813, 185.182, 0], + "to": [-2.563, -4.612, 0], + "ti": [2.332, 3.906, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 13, + "s": [215.51, 172.535, 0], + "to": [-2.332, -3.906, 0], + "ti": [2.146, 3.349, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 14, + "s": [208.822, 161.746, 0], + "to": [-2.146, -3.349, 0], + "ti": [1.992, 2.898, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 15, + "s": [202.636, 152.442, 0], + "to": [-1.992, -2.898, 0], + "ti": [1.863, 2.525, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [196.868, 144.357, 0], + "to": [-1.863, -2.525, 0], + "ti": [1.751, 2.21, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [191.458, 137.291, 0], + "to": [-1.751, -2.21, 0], + "ti": [1.653, 1.941, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [186.36, 131.094, 0], + "to": [-1.653, -1.941, 0], + "ti": [1.563, 1.706, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [181.542, 125.648, 0], + "to": [-1.563, -1.706, 0], + "ti": [1.481, 1.501, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [176.98, 120.856, 0], + "to": [-1.481, -1.501, 0], + "ti": [1.403, 1.32, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 21, + "s": [172.656, 116.64, 0], + "to": [-1.403, -1.32, 0], + "ti": [1.328, 1.158, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [168.561, 112.936, 0], + "to": [-1.328, -1.158, 0], + "ti": [1.255, 1.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [164.687, 109.689, 0], + "to": [-1.255, -1.014, 0], + "ti": [1.183, 0.886, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [161.03, 106.849, 0], + "to": [-1.183, -0.886, 0], + "ti": [1.111, 0.771, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [157.59, 104.374, 0], + "to": [-1.111, -0.771, 0], + "ti": [1.038, 0.668, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [154.367, 102.223, 0], + "to": [-1.038, -0.668, 0], + "ti": [0.964, 0.577, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [151.363, 100.364, 0], + "to": [-0.964, -0.577, 0], + "ti": [0.888, 0.495, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 28, + "s": [148.583, 98.763, 0], + "to": [-0.888, -0.495, 0], + "ti": [0.81, 0.422, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [146.035, 97.394, 0], + "to": [-0.81, -0.422, 0], + "ti": [0.741, 0.358, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [143.723, 96.23, 0], + "to": [-0.741, -0.358, 0], + "ti": [0.687, 0.303, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 31, + "s": [141.59, 95.244, 0], + "to": [-0.687, -0.303, 0], + "ti": [0.639, 0.255, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 32, + "s": [139.604, 94.413, 0], + "to": [-0.639, -0.255, 0], + "ti": [0.592, 0.214, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [137.759, 93.715, 0], + "to": [-0.592, -0.214, 0], + "ti": [0.547, 0.179, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 34, + "s": [136.052, 93.13, 0], + "to": [-0.547, -0.179, 0], + "ti": [0.502, 0.149, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 35, + "s": [134.48, 92.643, 0], + "to": [-0.502, -0.149, 0], + "ti": [0.46, 0.124, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 36, + "s": [133.038, 92.238, 0], + "to": [-0.46, -0.124, 0], + "ti": [0.418, 0.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 37, + "s": [131.723, 91.901, 0], + "to": [-0.418, -0.103, 0], + "ti": [0.378, 0.085, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 38, + "s": [130.53, 91.622, 0], + "to": [-0.378, -0.085, 0], + "ti": [0.339, 0.071, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 39, + "s": [129.457, 91.39, 0], + "to": [-0.339, -0.071, 0], + "ti": [0.301, 0.059, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 40, + "s": [128.499, 91.197, 0], + "to": [-0.301, -0.059, 0], + "ti": [0.264, 0.049, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 41, + "s": [127.654, 91.037, 0], + "to": [-0.264, -0.049, 0], + "ti": [0.228, 0.041, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 42, + "s": [126.917, 90.903, 0], + "to": [-0.228, -0.041, 0], + "ti": [0.193, 0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 43, + "s": [126.287, 90.791, 0], + "to": [-0.193, -0.034, 0], + "ti": [0.158, 0.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 44, + "s": [125.761, 90.698, 0], + "to": [-0.158, -0.028, 0], + "ti": [0.134, 0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 45, + "s": [125.337, 90.622, 0], + "to": [-0.134, -0.025, 0], + "ti": [0.126, 0.027, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 46, + "s": [124.96, 90.547, 0], + "to": [-0.126, -0.027, 0], + "ti": [0.127, 0.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 47, + "s": [124.579, 90.461, 0], + "to": [-0.127, -0.03, 0], + "ti": [0.127, 0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 48, + "s": [124.196, 90.364, 0], + "to": [-0.127, -0.034, 0], + "ti": [0.126, 0.037, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 49, + "s": [123.816, 90.257, 0], + "to": [-0.126, -0.037, 0], + "ti": [0.124, 0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 50, + "s": [123.44, 90.141, 0], + "to": [-0.124, -0.04, 0], + "ti": [0.121, 0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 51, + "s": [123.073, 90.017, 0], + "to": [-0.121, -0.042, 0], + "ti": [0.116, 0.044, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 52, + "s": [122.717, 89.887, 0], + "to": [-0.116, -0.044, 0], + "ti": [0.11, 0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 53, + "s": [122.376, 89.751, 0], + "to": [-0.11, -0.046, 0], + "ti": [0.103, 0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 54, + "s": [122.055, 89.613, 0], + "to": [-0.103, -0.046, 0], + "ti": [0.095, 0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 55, + "s": [121.755, 89.474, 0], + "to": [-0.095, -0.046, 0], + "ti": [0.086, 0.045, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 56, + "s": [121.483, 89.337, 0], + "to": [-0.086, -0.045, 0], + "ti": [0.075, 0.043, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 57, + "s": [121.241, 89.204, 0], + "to": [-0.075, -0.043, 0], + "ti": [0.062, 0.041, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 58, + "s": [121.035, 89.077, 0], + "to": [-0.062, -0.041, 0], + "ti": [0.028, 0.019, 0] + }, + { "t": 59, "s": [120.867, 88.96, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.272, 0.954, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 5, + "s": [88.213, 98.042, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.933, 0.787, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, -0.101, 0] }, + "t": 6, + "s": [98.671, 49.922, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 0.883, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.333, 0.137, 0] }, + "t": 7, + "s": [54.098, 71.655, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.856, 1.001, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.111, 0.287, 0] }, + "t": 8, + "s": [63.017, 105.433, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.719, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.076, 0.001, 0] }, + "t": 9, + "s": [59.185, 119.254, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 1.027, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.071, 0.118, 0] }, + "t": 10, + "s": [102.36, 105.209, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 0.921, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.001, 0.02, 0] }, + "t": 11, + "s": [79.066, 71.811, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.893, -1.794, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.579, -1.652, 0] }, + "t": 12, + "s": [101.985, 115.908, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.972, 0.937, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.076, 0.086, 0] }, + "t": 13, + "s": [105.84, 113.791, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.033, 0.698, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.042, -0.255, 0] }, + "t": 14, + "s": [60.688, 44.915, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.04, 0.92, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.024, 0.115, 0] }, + "t": 15, + "s": [90.735, 61.894, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 0.271, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, -2.022, 0] }, + "t": 16, + "s": [48.636, 106.533, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.029, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.867, 0.094, 0] }, + "t": 17, + "s": [110.804, 104.766, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.309, 0.797, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.022, -0.018, 0] }, + "t": 18, + "s": [105.35, 91.067, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.026, 0.865, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.066, 0.141, 0] }, + "t": 19, + "s": [112.726, 102.388, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 1.297, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.217, 0] }, + "t": 20, + "s": [78.021, 118.647, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.73, 0.94, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.493, 0.065, 0] }, + "t": 21, + "s": [123.499, 128.748, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.684, 0.681, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.12, -0.217, 0] }, + "t": 22, + "s": [116.924, 82.593, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 1.037, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.113, 0] }, + "t": 23, + "s": [102.179, 95.418, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.886, 0.872, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, 0.026, 0] }, + "t": 24, + "s": [61.093, 131.691, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.995, 1.018, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.309, 0.239, 0] }, + "t": 25, + "s": [97.755, 79.275, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.561, 0.959, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.006, 0.015, 0] }, + "t": 26, + "s": [111.269, 51.174, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.103, -0.081, 0] }, + "t": 27, + "s": [98.597, 85.374, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, 0.259, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.031, 0.937, 0] }, + "t": 28, + "s": [44.555, 68.006, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.03, 1.073, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.425, 0.094, 0] }, + "t": 29, + "s": [83.792, 66.311, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.079, 1.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.022, 0.039, 0] }, + "t": 30, + "s": [93.366, 52.935, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.872, 0.97, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.041, 0.017, 0] }, + "t": 31, + "s": [80.351, 77.978, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.459, 0.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.24, -0.047, 0] }, + "t": 32, + "s": [105.736, 46.617, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.918, 1.164, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 1.147, 0] }, + "t": 33, + "s": [119.231, 66.597, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.338, 0.408, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-4.839, 0.055, 0] }, + "t": 34, + "s": [31.333, 68.163, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.923, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, 0.097, 0] }, + "t": 35, + "s": [32.821, 63.516, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.316, 1.245, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.049, -0.192, 0] }, + "t": 36, + "s": [55.229, 35.157, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.082, 0.955, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.095, 0.062, 0] }, + "t": 37, + "s": [53.579, 43.75, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.008, 0.863, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.041, -0.1, 0] }, + "t": 38, + "s": [41.681, 9.938, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 1.024, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.008, 0.213, 0] }, + "t": 39, + "s": [65.338, 25.314, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.135, 1.097, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, 0.019, 0] }, + "t": 40, + "s": [39.293, 35.228, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.942, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.052, 0.045, 0] }, + "t": 41, + "s": [71.909, 22.453, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 1.746, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.192, 0.562, 0] }, + "t": 42, + "s": [-13.722, 50.113, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.78, 0.885, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, 0.075, 0] }, + "t": 43, + "s": [12.165, 54.928, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 1.049, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.134, 0.304, 0] }, + "t": 44, + "s": [36.047, 7.012, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.981, 0.875, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.369, 0.031, 0] }, + "t": 45, + "s": [75.273, -11.082, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.976, 1.192, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.024, 0.248, 0] }, + "t": 46, + "s": [68.05, 17.747, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.142, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.033, 0.058, 0] }, + "t": 47, + "s": [73.648, 32.314, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.915, 0.932, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, 0.553, 0] }, + "t": 48, + "s": [69.641, -15.771, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.919, -0.285, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [4.378, -0.361, 0] }, + "t": 49, + "s": [32.387, -24.312, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [216.656, 0.822, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-3.24, 0.089, 0] }, + "t": 50, + "s": [31.664, -22.708, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 0.876, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.083, 0.156, 0] }, + "t": 51, + "s": [31.682, 0.419, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.616, 0.585, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.235, 0.252, 0] }, + "t": 52, + "s": [-15.245, 26.807, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.106, 0.104, 0] }, + "t": 53, + "s": [-2.957, 39.841, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 0.871, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.581, -0.016, 0] }, + "t": 54, + "s": [41.396, 91.664, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.754, 0.858, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.15, 0.236, 0] }, + "t": 55, + "s": [48.828, 48.327, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.071, 0.928, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.075, 0.203, 0] }, + "t": 56, + "s": [46.178, 24.721, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.871, 0.408, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, -0.524, 0] }, + "t": 57, + "s": [72.828, 8.231, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.235, 0.097, 0] }, + "t": 58, + "s": [23.424, 10.493, 100] + }, + { "t": 59, "s": [-3.769, 24.296, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 5, + "op": 60, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 22, + "ty": 4, + "nm": "Shape Layer 30", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 8, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 35, + "s": [100] + }, + { "t": 51, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.613 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [273.484, 300.616, 0], + "to": [-0.073, -0.268, 0], + "ti": [0.394, 1.23, 0] + }, + { + "i": { "x": 0.833, "y": 0.766 }, + "o": { "x": 0.167, "y": 0.106 }, + "t": 9, + "s": [273.044, 299.005, 0], + "to": [-0.394, -1.23, 0], + "ti": [0.97, 2.68, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 10, + "s": [271.118, 293.234, 0], + "to": [-0.97, -2.68, 0], + "ti": [1.519, 3.557, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 11, + "s": [267.222, 282.925, 0], + "to": [-1.519, -3.557, 0], + "ti": [1.983, 3.196, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 12, + "s": [262.002, 271.894, 0], + "to": [-1.983, -3.196, 0], + "ti": [2.392, 1.007, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.191 }, + "t": 13, + "s": [255.326, 263.748, 0], + "to": [-2.392, -1.007, 0], + "ti": [1.906, -1.439, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 14, + "s": [247.647, 265.854, 0], + "to": [-1.906, 1.439, 0], + "ti": [1.029, -2.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 15, + "s": [243.888, 272.381, 0], + "to": [-1.029, 2.094, 0], + "ti": [0.709, -1.9, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 16, + "s": [241.473, 278.416, 0], + "to": [-0.709, 1.9, 0], + "ti": [0.56, -1.691, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 17, + "s": [239.636, 283.781, 0], + "to": [-0.56, 1.691, 0], + "ti": [0.476, -1.51, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 18, + "s": [238.111, 288.564, 0], + "to": [-0.476, 1.51, 0], + "ti": [0.423, -1.353, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [236.781, 292.841, 0], + "to": [-0.423, 1.353, 0], + "ti": [0.389, -1.218, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [235.575, 296.684, 0], + "to": [-0.389, 1.218, 0], + "ti": [0.367, -1.099, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [234.45, 300.149, 0], + "to": [-0.367, 1.099, 0], + "ti": [0.353, -0.992, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [233.375, 303.275, 0], + "to": [-0.353, 0.992, 0], + "ti": [0.346, -0.895, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [232.33, 306.098, 0], + "to": [-0.346, 0.895, 0], + "ti": [0.345, -0.807, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [231.297, 308.646, 0], + "to": [-0.345, 0.807, 0], + "ti": [0.347, -0.725, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [230.261, 310.941, 0], + "to": [-0.347, 0.725, 0], + "ti": [0.353, -0.648, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [229.214, 312.998, 0], + "to": [-0.353, 0.648, 0], + "ti": [0.361, -0.575, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 27, + "s": [228.146, 314.83, 0], + "to": [-0.361, 0.575, 0], + "ti": [0.371, -0.504, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [227.049, 316.449, 0], + "to": [-0.371, 0.504, 0], + "ti": [0.381, -0.434, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 29, + "s": [225.922, 317.856, 0], + "to": [-0.381, 0.434, 0], + "ti": [0.391, -0.366, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 30, + "s": [224.764, 319.055, 0], + "to": [-0.391, 0.366, 0], + "ti": [0.401, -0.298, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 31, + "s": [223.576, 320.049, 0], + "to": [-0.401, 0.298, 0], + "ti": [0.41, -0.232, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 32, + "s": [222.359, 320.843, 0], + "to": [-0.41, 0.232, 0], + "ti": [0.415, -0.168, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 33, + "s": [221.118, 321.443, 0], + "to": [-0.415, 0.168, 0], + "ti": [0.412, -0.106, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 34, + "s": [219.872, 321.85, 0], + "to": [-0.412, 0.106, 0], + "ti": [0.401, -0.05, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 35, + "s": [218.647, 322.076, 0], + "to": [-0.401, 0.05, 0], + "ti": [0.385, -0.003, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 36, + "s": [217.463, 322.147, 0], + "to": [-0.385, 0.003, 0], + "ti": [0.364, 0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 37, + "s": [216.337, 322.093, 0], + "to": [-0.364, -0.034, 0], + "ti": [0.341, 0.06, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 38, + "s": [215.276, 321.946, 0], + "to": [-0.341, -0.06, 0], + "ti": [0.316, 0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 39, + "s": [214.288, 321.735, 0], + "to": [-0.316, -0.077, 0], + "ti": [0.29, 0.086, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 40, + "s": [213.378, 321.486, 0], + "to": [-0.29, -0.086, 0], + "ti": [0.265, 0.09, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 41, + "s": [212.546, 321.219, 0], + "to": [-0.265, -0.09, 0], + "ti": [0.239, 0.088, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 42, + "s": [211.79, 320.949, 0], + "to": [-0.239, -0.088, 0], + "ti": [0.212, 0.083, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 43, + "s": [211.114, 320.689, 0], + "to": [-0.212, -0.083, 0], + "ti": [0.186, 0.075, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 44, + "s": [210.521, 320.45, 0], + "to": [-0.186, -0.075, 0], + "ti": [0.176, 0.067, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 45, + "s": [209.997, 320.238, 0], + "to": [-0.176, -0.067, 0], + "ti": [0.178, 0.059, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 46, + "s": [209.465, 320.047, 0], + "to": [-0.178, -0.059, 0], + "ti": [0.179, 0.05, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 47, + "s": [208.927, 319.881, 0], + "to": [-0.179, -0.05, 0], + "ti": [0.179, 0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 48, + "s": [208.392, 319.745, 0], + "to": [-0.179, -0.042, 0], + "ti": [0.184, 0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 49, + "s": [207.85, 319.63, 0], + "to": [-0.184, -0.036, 0], + "ti": [0.189, 0.031, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 50, + "s": [207.287, 319.528, 0], + "to": [-0.189, -0.031, 0], + "ti": [0.191, 0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 51, + "s": [206.714, 319.442, 0], + "to": [-0.191, -0.026, 0], + "ti": [0.19, 0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 52, + "s": [206.14, 319.374, 0], + "to": [-0.19, -0.019, 0], + "ti": [0.186, 0.013, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 53, + "s": [205.574, 319.326, 0], + "to": [-0.186, -0.013, 0], + "ti": [0.18, 0.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 54, + "s": [205.024, 319.298, 0], + "to": [-0.18, -0.006, 0], + "ti": [0.171, -0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 55, + "s": [204.495, 319.292, 0], + "to": [-0.171, 0.002, 0], + "ti": [0.161, -0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 56, + "s": [203.995, 319.308, 0], + "to": [-0.161, 0.009, 0], + "ti": [0.149, -0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 57, + "s": [203.528, 319.347, 0], + "to": [-0.149, 0.017, 0], + "ti": [0.136, -0.024, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 58, + "s": [203.099, 319.409, 0], + "to": [-0.136, 0.024, 0], + "ti": [0.065, -0.014, 0] + }, + { "t": 59, "s": [202.712, 319.493, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.949, 1.131, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 8, + "s": [62.161, 96.543, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.907, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.13, 0.051, 0] }, + "t": 9, + "s": [100.156, 112.306, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.255, 0.94, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.78, -0.001, 0] }, + "t": 10, + "s": [85.337, 71.714, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 0.737, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, -0.212, 0] }, + "t": 11, + "s": [83.564, 111.805, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.317, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.881, 0.122, 0] }, + "t": 12, + "s": [58.626, 100.499, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.968, 0.759, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.08, 0.397, 0] }, + "t": 13, + "s": [57.883, 76.161, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.128, 1.176, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.051, 0.127, 0] }, + "t": 14, + "s": [79.277, 69.687, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 0.877, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, 0.057, 0] }, + "t": 15, + "s": [66.041, 57.442, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.189, 0.928, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.092, 0.26, 0] }, + "t": 16, + "s": [99.685, 95.603, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.016, 1.082, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, -0.51, 0] }, + "t": 17, + "s": [83.661, 113.563, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 1.121, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.013, 0.041, 0] }, + "t": 18, + "s": [136.015, 111.04, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.746, 0.893, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.873, 0.049, 0] }, + "t": 19, + "s": [73.781, 116.06, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.529, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.124, 0.375, 0] }, + "t": 20, + "s": [79.202, 103.731, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.027, 1.092, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.055, 0.101, 0] }, + "t": 21, + "s": [90.283, 100.207, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.852, 0.985, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.044, 0] }, + "t": 22, + "s": [83.612, 83.82, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.603, 0.729, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.191, -0.018, 0] }, + "t": 23, + "s": [92.451, 118.313, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.909, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.106, 0.12, 0] }, + "t": 24, + "s": [99.265, 89.881, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.481, 0.93, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.02, -0.001, 0] }, + "t": 25, + "s": [124.872, 26, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, 0.628, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, -0.442, 0] }, + "t": 26, + "s": [127.15, 89.446, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.841, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-2.332, 0.107, 0] }, + "t": 27, + "s": [57.069, 79.381, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.572, 0.791, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.175, -0.245, 0] }, + "t": 28, + "s": [59.486, 44.49, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.638, 0.895, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.103, 0.139, 0] }, + "t": 29, + "s": [61.689, 53.354, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.822, 1.105, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.108, 0.401, 0] }, + "t": 30, + "s": [70.8, 66.698, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.094, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.157, 0.047, 0] }, + "t": 31, + "s": [101.268, 70.196, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.89, -1.504, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, -0.649, 0] }, + "t": 32, + "s": [135.914, 62.272, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.08, 0.944, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.345, 0.086, 0] }, + "t": 33, + "s": [62.097, 63.174, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.94, 0.915, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.041, -0.167, 0] }, + "t": 34, + "s": [38.578, 89.373, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.898, -33.804, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.213, 5.1, 0] }, + "t": 35, + "s": [84.734, 80.668, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.645, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.457, 0.084, 0] }, + "t": 36, + "s": [71.735, 80.523, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, -0.034, 0] }, + "t": 37, + "s": [68.832, 20.271, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 1.005, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.053, 0.563, 0] }, + "t": 38, + "s": [94.213, 63.191, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.499, 0.724, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.065, 0.004, 0] }, + "t": 39, + "s": [78.745, 70.653, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 1.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.119, 0] }, + "t": 40, + "s": [87.422, 62.786, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 0.984, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.658, 0.011, 0] }, + "t": 41, + "s": [26.733, 44.597, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [8.954, 0.747, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.609, -0.019, 0] }, + "t": 42, + "s": [23.521, 65.429, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.931, 0.997, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.082, 0.124, 0] }, + "t": 43, + "s": [23.011, 48.501, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.153, 0.822, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.407, -0.003, 0] }, + "t": 44, + "s": [72.162, 14.125, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.994, 1.075, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 0.156, 0] }, + "t": 45, + "s": [63.801, 47.128, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.742, 0.92, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.006, 0.039, 0] }, + "t": 46, + "s": [87.498, 84.73, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 1.295, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.123, -1.924, 0] }, + "t": 47, + "s": [65.378, 13.453, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.536, 1.079, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.497, 0.065, 0] }, + "t": 48, + "s": [19.027, 16.413, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.076, 0.957, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.102, 0.041, 0] }, + "t": 49, + "s": [25.686, 2.971, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 0.87, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, -0.09, 0] }, + "t": 50, + "s": [56.116, 29.236, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.444, 1.634, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.906, 0.231, 0] }, + "t": 51, + "s": [-1.889, 16.583, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.986, 0.961, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.098, 0.074, 0] }, + "t": 52, + "s": [2.996, 9.45, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 0.802, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.017, -0.074, 0] }, + "t": 53, + "s": [30.717, 70.822, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.484, 0.967, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.111, 0.144, 0] }, + "t": 54, + "s": [7.584, 38.216, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.944, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, -0.054, 0] }, + "t": 55, + "s": [17.496, -6.813, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.773, 1.079, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.143, -0.17, 0] }, + "t": 56, + "s": [68.936, 20.442, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.98, 0.725, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.132, 0.041, 0] }, + "t": 57, + "s": [50.024, 11.466, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.027, 0.12, 0] }, + "t": 58, + "s": [17.481, 29.004, 100] + }, + { "t": 59, "s": [42.14, 69.391, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.791173718022, 0.019608000213, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 60, + "st": 8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 23, + "ty": 4, + "nm": "Shape Layer 29", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 17, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 39, + "s": [100] + }, + { "t": 55, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 92, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.577 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 12, + "s": [270.833, 305.959, 0], + "to": [-0.088, -0.333, 0], + "ti": [0.479, 1.681, 0] + }, + { + "i": { "x": 0.833, "y": 0.762 }, + "o": { "x": 0.167, "y": 0.104 }, + "t": 13, + "s": [270.305, 303.959, 0], + "to": [-0.479, -1.681, 0], + "ti": [0.843, 3.89, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.128 }, + "t": 14, + "s": [267.957, 295.871, 0], + "to": [-0.843, -3.89, 0], + "ti": [-1.367, 3.831, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 15, + "s": [265.25, 280.619, 0], + "to": [1.367, -3.831, 0], + "ti": [-4.031, 0.131, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 16, + "s": [276.159, 272.888, 0], + "to": [4.031, -0.131, 0], + "ti": [-3.947, -2.293, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 17, + "s": [289.438, 279.833, 0], + "to": [3.947, 2.293, 0], + "ti": [-3.163, -2.107, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 18, + "s": [299.839, 286.644, 0], + "to": [3.163, 2.107, 0], + "ti": [-2.643, -1.789, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 19, + "s": [308.416, 292.475, 0], + "to": [2.643, 1.789, 0], + "ti": [-2.265, -1.502, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 20, + "s": [315.699, 297.38, 0], + "to": [2.265, 1.502, 0], + "ti": [-1.975, -1.258, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 21, + "s": [322.005, 301.489, 0], + "to": [1.975, 1.258, 0], + "ti": [-1.746, -1.051, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 22, + "s": [327.55, 304.928, 0], + "to": [1.746, 1.051, 0], + "ti": [-1.558, -0.872, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 23, + "s": [332.48, 307.794, 0], + "to": [1.558, 0.872, 0], + "ti": [-1.4, -0.715, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 24, + "s": [336.899, 310.159, 0], + "to": [1.4, 0.715, 0], + "ti": [-1.265, -0.574, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 25, + "s": [340.882, 312.081, 0], + "to": [1.265, 0.574, 0], + "ti": [-1.148, -0.448, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 26, + "s": [344.489, 313.605, 0], + "to": [1.148, 0.448, 0], + "ti": [-1.045, -0.333, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 27, + "s": [347.771, 314.769, 0], + "to": [1.045, 0.333, 0], + "ti": [-0.954, -0.228, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 28, + "s": [350.762, 315.603, 0], + "to": [0.954, 0.228, 0], + "ti": [-0.867, -0.129, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 29, + "s": [353.494, 316.134, 0], + "to": [0.867, 0.129, 0], + "ti": [-0.779, -0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 30, + "s": [355.966, 316.376, 0], + "to": [0.779, 0.034, 0], + "ti": [-0.692, 0.054, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 31, + "s": [358.169, 316.339, 0], + "to": [0.692, -0.054, 0], + "ti": [-0.607, 0.132, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 32, + "s": [360.118, 316.051, 0], + "to": [0.607, -0.132, 0], + "ti": [-0.525, 0.197, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 33, + "s": [361.814, 315.546, 0], + "to": [0.525, -0.197, 0], + "ti": [-0.446, 0.247, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 34, + "s": [363.265, 314.868, 0], + "to": [0.446, -0.247, 0], + "ti": [-0.374, 0.281, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [364.49, 314.065, 0], + "to": [0.374, -0.281, 0], + "ti": [-0.309, 0.299, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 36, + "s": [365.508, 313.183, 0], + "to": [0.309, -0.299, 0], + "ti": [-0.254, 0.304, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 37, + "s": [366.345, 312.269, 0], + "to": [0.254, -0.304, 0], + "ti": [-0.208, 0.299, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 38, + "s": [367.029, 311.356, 0], + "to": [0.208, -0.299, 0], + "ti": [-0.171, 0.285, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 39, + "s": [367.591, 310.475, 0], + "to": [0.171, -0.285, 0], + "ti": [-0.143, 0.266, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 40, + "s": [368.057, 309.644, 0], + "to": [0.143, -0.266, 0], + "ti": [-0.123, 0.244, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 41, + "s": [368.451, 308.877, 0], + "to": [0.123, -0.244, 0], + "ti": [-0.108, 0.219, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 42, + "s": [368.793, 308.182, 0], + "to": [0.108, -0.219, 0], + "ti": [-0.097, 0.192, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 43, + "s": [369.097, 307.564, 0], + "to": [0.097, -0.192, 0], + "ti": [-0.091, 0.166, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 44, + "s": [369.377, 307.027, 0], + "to": [0.091, -0.166, 0], + "ti": [-0.087, 0.139, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 45, + "s": [369.642, 306.571, 0], + "to": [0.087, -0.139, 0], + "ti": [-0.085, 0.112, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 46, + "s": [369.899, 306.194, 0], + "to": [0.085, -0.112, 0], + "ti": [-0.083, 0.087, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 47, + "s": [370.15, 305.896, 0], + "to": [0.083, -0.087, 0], + "ti": [-0.082, 0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 48, + "s": [370.398, 305.674, 0], + "to": [0.082, -0.062, 0], + "ti": [-0.081, 0.039, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 49, + "s": [370.644, 305.522, 0], + "to": [0.081, -0.039, 0], + "ti": [-0.079, 0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 50, + "s": [370.885, 305.438, 0], + "to": [0.079, -0.017, 0], + "ti": [-0.075, -0.004, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 51, + "s": [371.117, 305.419, 0], + "to": [0.075, 0.004, 0], + "ti": [-0.071, -0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 52, + "s": [371.334, 305.462, 0], + "to": [0.071, 0.019, 0], + "ti": [-0.071, -0.023, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 53, + "s": [371.546, 305.533, 0], + "to": [0.071, 0.023, 0], + "ti": [-0.069, -0.021, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 54, + "s": [371.758, 305.598, 0], + "to": [0.069, 0.021, 0], + "ti": [-0.064, -0.018, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 55, + "s": [371.962, 305.656, 0], + "to": [0.064, 0.018, 0], + "ti": [-0.056, -0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.859 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 56, + "s": [372.145, 305.704, 0], + "to": [0.056, 0.014, 0], + "ti": [-0.042, -0.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.882 }, + "o": { "x": 0.167, "y": 0.204 }, + "t": 57, + "s": [372.295, 305.741, 0], + "to": [0.042, 0.01, 0], + "ti": [-0.025, -0.005, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.285 }, + "t": 58, + "s": [372.399, 305.764, 0], + "to": [0.025, 0.005, 0], + "ti": [-0.007, -0.001, 0] + }, + { "t": 59, "s": [372.443, 305.77, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.332, 1.186, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 12, + "s": [64.57, 85.432, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.875, 0.947, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.095, 0.058, 0] }, + "t": 13, + "s": [69.942, 108.953, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.206, 0.842, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.249, -0.144, 0] }, + "t": 14, + "s": [107.607, 32.831, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.969, 0.836, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.059, 0.176, 0] }, + "t": 15, + "s": [126.531, 60.735, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.048, 0.17, 0] }, + "t": 16, + "s": [60.769, 85.755, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.908, 1.153, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.222, 0] }, + "t": 17, + "s": [102.39, 109.836, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.333, 0.945, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.877, 0.054, 0] }, + "t": 18, + "s": [60.887, 124.258, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.949, 1.054, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, -0.162, 0] }, + "t": 19, + "s": [56.529, 83.394, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.322, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.133, 0.033, 0] }, + "t": 20, + "s": [78.284, 97.261, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.976, 0.786, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.066, -0.05, 0] }, + "t": 21, + "s": [69.892, 74.45, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.923, 1.181, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.033, 0.137, 0] }, + "t": 22, + "s": [110.724, 88.677, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.066, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.984, 0.057, 0] }, + "t": 23, + "s": [81.454, 110.927, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.003, 0.937, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, -0.193, 0] }, + "t": 24, + "s": [83.739, 40.242, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.86, 0.536, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.002, -0.266, 0] }, + "t": 25, + "s": [107.061, 61.553, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.865, 1.004, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.206, 0.102, 0] }, + "t": 26, + "s": [83.024, 56.466, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.851, 0.868, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.217, 0.004, 0] }, + "t": 27, + "s": [66.63, 33.237, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.158, 0.859, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.189, 0.226, 0] }, + "t": 28, + "s": [56.437, 57.54, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.865, 1.267, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.203, 0] }, + "t": 29, + "s": [48.398, 71.747, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.754, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.218, 0.064, 0] }, + "t": 30, + "s": [71.71, 81.652, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.096, 0.683, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.126, -0.203, 0] }, + "t": 31, + "s": [86.087, 39.983, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.99, 0.804, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, 0.113, 0] }, + "t": 32, + "s": [114.075, 52.122, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.96, 0.963, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.012, 0.145, 0] }, + "t": 33, + "s": [53.751, 86.117, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 0.79, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.077, -0.066, 0] }, + "t": 34, + "s": [106.75, 131.89, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.204, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.532, 0.138, 0] }, + "t": 35, + "s": [79.216, 106.312, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.915, 0.889, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.093, -0.024, 0] }, + "t": 36, + "s": [82.944, 67.378, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.454, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [3.696, 0.337, 0] }, + "t": 37, + "s": [114.826, 97.73, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.872, 0.088, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.098, -0.207, 0] }, + "t": 38, + "s": [115.562, 107.689, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.076, 0.092, 0] }, + "t": 39, + "s": [119.647, 104.826, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.157, 0.579, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.17, 0.758, 0] }, + "t": 40, + "s": [72.833, 76.34, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 0.104, 0] }, + "t": 41, + "s": [88.225, 72.82, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.853, 0.888, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.07, -0.05, 0] }, + "t": 42, + "s": [43.922, 58.537, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, -0.216, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.193, 0.325, 0] }, + "t": 43, + "s": [67.927, 67.475, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.471, 1.047, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.3, 0.089, 0] }, + "t": 44, + "s": [86.125, 70.552, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.904, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.03, 0] }, + "t": 45, + "s": [93.113, 112.383, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.526, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.633, -0.31, 0] }, + "t": 46, + "s": [46.616, 46.845, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.045, 1.106, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.101, 0.012, 0] }, + "t": 47, + "s": [39.563, 60.724, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.969, 1.027, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.029, 0.047, 0] }, + "t": 48, + "s": [6.525, 44.501, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 0.915, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.05, 0.021, 0] }, + "t": 49, + "s": [57.474, 81.367, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.854, 1.348, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.48, 3.659, 0] }, + "t": 50, + "s": [25.518, 32.394, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.966, 0.815, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.195, 0.067, 0] }, + "t": 51, + "s": [30.245, 31.253, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.921, 1.317, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.077, 0.152, 0] }, + "t": 52, + "s": [33.783, 37.163, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.996, 0.978, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.48, 0.066, 0] }, + "t": 53, + "s": [-10.763, 44.348, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.91, 0.989, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.087, -0.029, 0] }, + "t": 54, + "s": [-8.389, 9.855, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.194, 0.978, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.177, -0.012, 0] }, + "t": 55, + "s": [46.091, 35.382, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.01, 0.743, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, -0.03, 0] }, + "t": 56, + "s": [50.24, 13.115, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.876, 0.981, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.009, 0.123, 0] }, + "t": 57, + "s": [36.428, 29.519, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.252, -0.025, 0] }, + "t": 58, + "s": [51.9, 63.715, 100] + }, + { "t": 59, "s": [59.535, 37.52, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 12, + "op": 60, + "st": 12, + "bm": 0 + }, + { + "ddd": 0, + "ind": 24, + "ty": 4, + "nm": "Shape Layer 28", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 3, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 8, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [100] + }, + { "t": 46, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 92, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.613 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 3, + "s": [270.565, 305.387, 0], + "to": [-0.175, -0.467, 0], + "ti": [0.928, 2.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.766 }, + "o": { "x": 0.167, "y": 0.106 }, + "t": 4, + "s": [269.518, 302.585, 0], + "to": [-0.928, -2.118, 0], + "ti": [2.866, 4.132, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.13 }, + "t": 5, + "s": [264.999, 292.679, 0], + "to": [-2.866, -4.132, 0], + "ti": [5.573, 3.332, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 6, + "s": [252.323, 277.795, 0], + "to": [-5.573, -3.332, 0], + "ti": [6.454, -0.145, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 7, + "s": [231.564, 272.688, 0], + "to": [-6.454, 0.145, 0], + "ti": [5.175, -2.485, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 8, + "s": [213.599, 278.665, 0], + "to": [-5.175, 2.485, 0], + "ti": [3.799, -3.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 9, + "s": [200.516, 287.597, 0], + "to": [-3.799, 3.017, 0], + "ti": [2.848, -2.986, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 10, + "s": [190.807, 296.767, 0], + "to": [-2.848, 2.986, 0], + "ti": [2.177, -2.823, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 11, + "s": [183.426, 305.511, 0], + "to": [-2.177, 2.823, 0], + "ti": [1.672, -2.64, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 12, + "s": [177.747, 313.704, 0], + "to": [-1.672, 2.64, 0], + "ti": [1.269, -2.465, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 13, + "s": [173.394, 321.352, 0], + "to": [-1.269, 2.465, 0], + "ti": [0.931, -2.298, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 14, + "s": [170.134, 328.494, 0], + "to": [-0.931, 2.298, 0], + "ti": [0.638, -2.135, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 15, + "s": [167.806, 335.14, 0], + "to": [-0.638, 2.135, 0], + "ti": [0.374, -1.972, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [166.306, 341.307, 0], + "to": [-0.374, 1.972, 0], + "ti": [0.132, -1.802, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [165.565, 346.975, 0], + "to": [-0.132, 1.802, 0], + "ti": [-0.087, -1.628, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [165.516, 352.122, 0], + "to": [0.087, 1.628, 0], + "ti": [-0.279, -1.446, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [166.088, 356.74, 0], + "to": [0.279, 1.446, 0], + "ti": [-0.435, -1.255, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [167.189, 360.798, 0], + "to": [0.435, 1.255, 0], + "ti": [-0.549, -1.065, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [168.697, 364.273, 0], + "to": [0.549, 1.065, 0], + "ti": [-0.622, -0.888, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [170.482, 367.189, 0], + "to": [0.622, 0.888, 0], + "ti": [-0.661, -0.731, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [172.43, 369.6, 0], + "to": [0.661, 0.731, 0], + "ti": [-0.672, -0.596, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [174.447, 371.574, 0], + "to": [0.672, 0.596, 0], + "ti": [-0.665, -0.483, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [176.464, 373.178, 0], + "to": [0.665, 0.483, 0], + "ti": [-0.646, -0.39, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [178.436, 374.475, 0], + "to": [0.646, 0.39, 0], + "ti": [-0.62, -0.314, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 27, + "s": [180.337, 375.52, 0], + "to": [0.62, 0.314, 0], + "ti": [-0.589, -0.251, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [182.153, 376.359, 0], + "to": [0.589, 0.251, 0], + "ti": [-0.557, -0.198, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 29, + "s": [183.874, 377.025, 0], + "to": [0.557, 0.198, 0], + "ti": [-0.524, -0.154, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 30, + "s": [185.496, 377.549, 0], + "to": [0.524, 0.154, 0], + "ti": [-0.49, -0.117, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 31, + "s": [187.016, 377.951, 0], + "to": [0.49, 0.117, 0], + "ti": [-0.456, -0.086, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 32, + "s": [188.435, 378.252, 0], + "to": [0.456, 0.086, 0], + "ti": [-0.422, -0.059, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [189.752, 378.465, 0], + "to": [0.422, 0.059, 0], + "ti": [-0.387, -0.035, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 34, + "s": [190.966, 378.603, 0], + "to": [0.387, 0.035, 0], + "ti": [-0.352, -0.015, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 35, + "s": [192.076, 378.677, 0], + "to": [0.352, 0.015, 0], + "ti": [-0.316, 0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 36, + "s": [193.079, 378.696, 0], + "to": [0.316, -0.002, 0], + "ti": [-0.278, 0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 37, + "s": [193.971, 378.666, 0], + "to": [0.278, -0.017, 0], + "ti": [-0.239, 0.029, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 38, + "s": [194.747, 378.596, 0], + "to": [0.239, -0.029, 0], + "ti": [-0.199, 0.039, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 39, + "s": [195.405, 378.492, 0], + "to": [0.199, -0.039, 0], + "ti": [-0.156, 0.047, 0] + }, + { + "i": { "x": 0.833, "y": 0.856 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 40, + "s": [195.939, 378.361, 0], + "to": [0.156, -0.047, 0], + "ti": [-0.11, 0.054, 0] + }, + { + "i": { "x": 0.833, "y": 0.86 }, + "o": { "x": 0.167, "y": 0.199 }, + "t": 41, + "s": [196.341, 378.209, 0], + "to": [0.11, -0.054, 0], + "ti": [-0.061, 0.058, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.206 }, + "t": 42, + "s": [196.601, 378.04, 0], + "to": [0.061, -0.058, 0], + "ti": [-0.017, 0.06, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 43, + "s": [196.709, 377.862, 0], + "to": [0.017, -0.06, 0], + "ti": [0.003, 0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.816 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 44, + "s": [196.702, 377.682, 0], + "to": [-0.003, -0.066, 0], + "ti": [-0.001, 0.08, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 45, + "s": [196.693, 377.464, 0], + "to": [0.001, -0.08, 0], + "ti": [-0.01, 0.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 46, + "s": [196.709, 377.203, 0], + "to": [0.01, -0.093, 0], + "ti": [-0.019, 0.104, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 47, + "s": [196.752, 376.906, 0], + "to": [0.019, -0.104, 0], + "ti": [-0.028, 0.112, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 48, + "s": [196.823, 376.58, 0], + "to": [0.028, -0.112, 0], + "ti": [-0.038, 0.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 49, + "s": [196.923, 376.233, 0], + "to": [0.038, -0.118, 0], + "ti": [-0.049, 0.122, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 50, + "s": [197.053, 375.871, 0], + "to": [0.049, -0.122, 0], + "ti": [-0.059, 0.124, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 51, + "s": [197.215, 375.501, 0], + "to": [0.059, -0.124, 0], + "ti": [-0.069, 0.124, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 52, + "s": [197.407, 375.127, 0], + "to": [0.069, -0.124, 0], + "ti": [-0.079, 0.122, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 53, + "s": [197.63, 374.756, 0], + "to": [0.079, -0.122, 0], + "ti": [-0.089, 0.119, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 54, + "s": [197.883, 374.392, 0], + "to": [0.089, -0.119, 0], + "ti": [-0.099, 0.115, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 55, + "s": [198.166, 374.04, 0], + "to": [0.099, -0.115, 0], + "ti": [-0.108, 0.109, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 56, + "s": [198.477, 373.703, 0], + "to": [0.108, -0.109, 0], + "ti": [-0.116, 0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 57, + "s": [198.814, 373.385, 0], + "to": [0.116, -0.102, 0], + "ti": [-0.124, 0.095, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 58, + "s": [199.175, 373.088, 0], + "to": [0.124, -0.095, 0], + "ti": [-0.064, 0.045, 0] + }, + { "t": 59, "s": [199.559, 372.816, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 1.422, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 3, + "s": [94.702, 122.655, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.272, 0.85, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.6, 0.07, 0] }, + "t": 4, + "s": [127.289, 129.977, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.732, 1.117, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, 0.187, 0] }, + "t": 5, + "s": [132.545, 85.581, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.121, 0.049, 0] }, + "t": 6, + "s": [110.128, 50.029, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.861, 2.842, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.066, 6.415, 0] }, + "t": 7, + "s": [60.526, 135.359, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.066, 0.745, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.209, 0.08, 0] }, + "t": 8, + "s": [88.167, 136.482, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.966, 0.932, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.037, 0.124, 0] }, + "t": 9, + "s": [106.49, 110.542, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.936, 0.426, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.056, -0.36, 0] }, + "t": 10, + "s": [73.621, 57.227, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.484, 1.02, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.27, 0.097, 0] }, + "t": 11, + "s": [93.234, 67.259, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.866, 0.935, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.016, 0] }, + "t": 12, + "s": [88.608, 126.279, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.185, 0.861, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.221, -0.293, 0] }, + "t": 13, + "s": [120.076, 52.9, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.916, 0.706, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.057, 0.207, 0] }, + "t": 14, + "s": [139.099, 69.169, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-1.441, 0.819, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [6.732, 0.116, 0] }, + "t": 15, + "s": [77.908, 80.095, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.941, 1.013, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.086, 0.155, 0] }, + "t": 16, + "s": [77.141, 107.685, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.598, 0.859, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.198, 0.011, 0] }, + "t": 17, + "s": [55.437, 139.887, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.889, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.105, 0.204, 0] }, + "t": 18, + "s": [61.857, 102.633, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.557, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.337, -0.045, 0] }, + "t": 19, + "s": [86.378, 76.933, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.048, 1.193, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.103, -0.014, 0] }, + "t": 20, + "s": [94.434, 93.656, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.03, 0.058, 0] }, + "t": 21, + "s": [129.176, 79.379, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.003, 0.846, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.385, -0.049, 0] }, + "t": 22, + "s": [74.62, 126.637, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.783, 0.843, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.003, 0.182, 0] }, + "t": 23, + "s": [59.528, 96.902, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.987, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, 0.178, 0] }, + "t": 24, + "s": [75.163, 71.778, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.98, 0.157, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.016, -0.467, 0] }, + "t": 25, + "s": [100.236, 49.638, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.196, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.026, 0.092, 0] }, + "t": 26, + "s": [79.183, 52.988, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 1.011, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, 0.384, 0] }, + "t": 27, + "s": [95.26, 83.538, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.998, 0.441, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.251, 0.01, 0] }, + "t": 28, + "s": [41.321, 92.009, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.333, 0.953, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.002, 0.098, 0] }, + "t": 29, + "s": [54.762, 82.447, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.996, 0.891, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, -0.107, 0] }, + "t": 30, + "s": [41.586, 27.852, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.941, 0.229, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.004, 0.35, 0] }, + "t": 31, + "s": [107.415, 51.724, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.942, 0.994, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.201, 0.093, 0] }, + "t": 32, + "s": [44.413, 59.172, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.637, 0.897, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.19, -0.007, 0] }, + "t": 33, + "s": [62.871, 120.641, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 1.033, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.108, 0.443, 0] }, + "t": 34, + "s": [57.246, 63.863, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.767, 0.841, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.63, 0.024, 0] }, + "t": 35, + "s": [38.372, 50.708, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.822, 1.066, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, 0.175, 0] }, + "t": 36, + "s": [37.754, 69.059, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.994, 0.844, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.156, 0.037, 0] }, + "t": 37, + "s": [58.88, 85.746, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 1.009, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.007, 0.179, 0] }, + "t": 38, + "s": [83, 55.846, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.235, 1.083, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.184, 0.008, 0] }, + "t": 39, + "s": [60.74, 29.847, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.881, 0.964, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, 0.042, 0] }, + "t": 40, + "s": [67.668, 58.5, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.257, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.279, -0.062, 0] }, + "t": 41, + "s": [41.227, 1.342, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 0.99, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.063, 0.452, 0] }, + "t": 42, + "s": [29.972, 34.049, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.558, 0.889, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.356, -0.011, 0] }, + "t": 43, + "s": [75.997, 41.447, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.923, 0.757, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, 0.337, 0] }, + "t": 44, + "s": [77.684, 34.902, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.665, 1.132, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.086, 0.127, 0] }, + "t": 45, + "s": [24.202, 32.753, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.007, 0.637, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, 0.051, 0] }, + "t": 46, + "s": [28.012, 28.648, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.981, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, 0.108, 0] }, + "t": 47, + "s": [-6.22, 39.267, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.981, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.024, -0.038, 0] }, + "t": 48, + "s": [30.742, 74.855, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 1.113, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, -0.024, 0] }, + "t": 49, + "s": [2.023, 50.337, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.727, 0.883, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.326, 0.048, 0] }, + "t": 50, + "s": [30.77, 69.402, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.902, 1.045, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.12, 0.292, 0] }, + "t": 51, + "s": [24.92, 24.502, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.108, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.55, 0.029, 0] }, + "t": 52, + "s": [11.611, 6.547, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.904, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.078, 0.962, 0] }, + "t": 53, + "s": [9.235, 34.159, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.825, -0.409, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.138, 0.611, 0] }, + "t": 54, + "s": [43.201, 36.778, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.973, 0.815, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.159, 0.089, 0] }, + "t": 55, + "s": [30.429, 37.192, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 1.034, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.039, 0.152, 0] }, + "t": 56, + "s": [16.318, 43.768, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.408, 0.765, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.6, 0.024, 0] }, + "t": 57, + "s": [25.931, 51.757, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, 0.129, 0] }, + "t": 58, + "s": [27.481, 40.555, 100] + }, + { "t": 59, "s": [52.128, 20.168, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3, + "op": 60, + "st": 3, + "bm": 0 + }, + { + "ddd": 0, + "ind": 25, + "ty": 4, + "nm": "Shape Layer 27", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 1, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 6, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 28, + "s": [100] + }, + { "t": 44, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 92, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.551 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 1, + "s": [264.583, 303.394, 0], + "to": [0.152, -0.309, 0], + "ti": [-0.732, 1.703, 0] + }, + { + "i": { "x": 0.833, "y": 0.762 }, + "o": { "x": 0.167, "y": 0.102 }, + "t": 2, + "s": [265.494, 301.541, 0], + "to": [0.732, -1.703, 0], + "ti": [-1.362, 4.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.128 }, + "t": 3, + "s": [268.975, 293.174, 0], + "to": [1.362, -4.094, 0], + "ti": [-1.445, 5.76, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 4, + "s": [273.666, 276.977, 0], + "to": [1.445, -5.76, 0], + "ti": [-1.23, 5.729, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 5, + "s": [277.646, 258.613, 0], + "to": [1.23, -5.729, 0], + "ti": [-1.123, 4.869, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 6, + "s": [281.044, 242.601, 0], + "to": [1.123, -4.869, 0], + "ti": [-1.146, 4.013, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 7, + "s": [284.385, 229.397, 0], + "to": [1.146, -4.013, 0], + "ti": [-1.227, 3.315, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 8, + "s": [287.919, 218.524, 0], + "to": [1.227, -3.315, 0], + "ti": [-1.326, 2.748, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 9, + "s": [291.745, 209.508, 0], + "to": [1.326, -2.748, 0], + "ti": [-1.42, 2.27, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 10, + "s": [295.873, 202.037, 0], + "to": [1.42, -2.27, 0], + "ti": [-1.493, 1.856, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 11, + "s": [300.264, 195.89, 0], + "to": [1.493, -1.856, 0], + "ti": [-1.535, 1.495, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 12, + "s": [304.832, 190.902, 0], + "to": [1.535, -1.495, 0], + "ti": [-1.541, 1.186, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 13, + "s": [309.473, 186.917, 0], + "to": [1.541, -1.186, 0], + "ti": [-1.513, 0.928, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 14, + "s": [314.076, 183.786, 0], + "to": [1.513, -0.928, 0], + "ti": [-1.459, 0.719, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 15, + "s": [318.551, 181.352, 0], + "to": [1.459, -0.719, 0], + "ti": [-1.388, 0.557, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 16, + "s": [322.832, 179.47, 0], + "to": [1.388, -0.557, 0], + "ti": [-1.306, 0.432, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 17, + "s": [326.879, 178.013, 0], + "to": [1.306, -0.432, 0], + "ti": [-1.218, 0.338, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 18, + "s": [330.667, 176.878, 0], + "to": [1.218, -0.338, 0], + "ti": [-1.129, 0.269, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 19, + "s": [334.187, 175.983, 0], + "to": [1.129, -0.269, 0], + "ti": [-1.043, 0.219, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 20, + "s": [337.444, 175.264, 0], + "to": [1.043, -0.219, 0], + "ti": [-0.959, 0.182, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 21, + "s": [340.444, 174.672, 0], + "to": [0.959, -0.182, 0], + "ti": [-0.877, 0.155, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [343.196, 174.174, 0], + "to": [0.877, -0.155, 0], + "ti": [-0.798, 0.134, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [345.706, 173.744, 0], + "to": [0.798, -0.134, 0], + "ti": [-0.72, 0.119, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 24, + "s": [347.981, 173.367, 0], + "to": [0.72, -0.119, 0], + "ti": [-0.644, 0.106, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 25, + "s": [350.026, 173.032, 0], + "to": [0.644, -0.106, 0], + "ti": [-0.57, 0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 26, + "s": [351.847, 172.732, 0], + "to": [0.57, -0.094, 0], + "ti": [-0.497, 0.083, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 27, + "s": [353.446, 172.467, 0], + "to": [0.497, -0.083, 0], + "ti": [-0.429, 0.075, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 28, + "s": [354.827, 172.237, 0], + "to": [0.429, -0.075, 0], + "ti": [-0.38, 0.083, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 29, + "s": [356.018, 172.02, 0], + "to": [0.38, -0.083, 0], + "ti": [-0.347, 0.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 30, + "s": [357.106, 171.74, 0], + "to": [0.347, -0.103, 0], + "ti": [-0.318, 0.12, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 31, + "s": [358.103, 171.404, 0], + "to": [0.318, -0.12, 0], + "ti": [-0.291, 0.134, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 32, + "s": [359.015, 171.022, 0], + "to": [0.291, -0.134, 0], + "ti": [-0.265, 0.144, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 33, + "s": [359.846, 170.603, 0], + "to": [0.265, -0.144, 0], + "ti": [-0.24, 0.151, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 34, + "s": [360.602, 170.159, 0], + "to": [0.24, -0.151, 0], + "ti": [-0.216, 0.155, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 35, + "s": [361.284, 169.698, 0], + "to": [0.216, -0.155, 0], + "ti": [-0.193, 0.156, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 36, + "s": [361.896, 169.23, 0], + "to": [0.193, -0.156, 0], + "ti": [-0.172, 0.154, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 37, + "s": [362.443, 168.763, 0], + "to": [0.172, -0.154, 0], + "ti": [-0.151, 0.15, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 38, + "s": [362.927, 168.306, 0], + "to": [0.151, -0.15, 0], + "ti": [-0.13, 0.143, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 39, + "s": [363.348, 167.866, 0], + "to": [0.13, -0.143, 0], + "ti": [-0.109, 0.134, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 40, + "s": [363.707, 167.448, 0], + "to": [0.109, -0.134, 0], + "ti": [-0.095, 0.123, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 41, + "s": [364.004, 167.059, 0], + "to": [0.095, -0.123, 0], + "ti": [-0.093, 0.109, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 42, + "s": [364.278, 166.709, 0], + "to": [0.093, -0.109, 0], + "ti": [-0.096, 0.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 43, + "s": [364.562, 166.405, 0], + "to": [0.096, -0.093, 0], + "ti": [-0.099, 0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 44, + "s": [364.856, 166.152, 0], + "to": [0.099, -0.076, 0], + "ti": [-0.1, 0.058, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 45, + "s": [365.154, 165.951, 0], + "to": [0.1, -0.058, 0], + "ti": [-0.1, 0.041, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 46, + "s": [365.455, 165.803, 0], + "to": [0.1, -0.041, 0], + "ti": [-0.099, 0.023, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 47, + "s": [365.754, 165.707, 0], + "to": [0.099, -0.023, 0], + "ti": [-0.096, 0.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 48, + "s": [366.048, 165.664, 0], + "to": [0.096, -0.006, 0], + "ti": [-0.093, -0.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 49, + "s": [366.333, 165.672, 0], + "to": [0.093, 0.01, 0], + "ti": [-0.088, -0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 50, + "s": [366.605, 165.727, 0], + "to": [0.088, 0.026, 0], + "ti": [-0.082, -0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 51, + "s": [366.86, 165.827, 0], + "to": [0.082, 0.04, 0], + "ti": [-0.074, -0.052, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 52, + "s": [367.094, 165.966, 0], + "to": [0.074, 0.052, 0], + "ti": [-0.065, -0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 53, + "s": [367.302, 166.14, 0], + "to": [0.065, 0.063, 0], + "ti": [-0.054, -0.071, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 54, + "s": [367.481, 166.343, 0], + "to": [0.054, 0.071, 0], + "ti": [-0.042, -0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 55, + "s": [367.625, 166.567, 0], + "to": [0.042, 0.077, 0], + "ti": [-0.028, -0.08, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 56, + "s": [367.73, 166.804, 0], + "to": [0.028, 0.08, 0], + "ti": [-0.012, -0.079, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 57, + "s": [367.791, 167.045, 0], + "to": [0.012, 0.079, 0], + "ti": [0.003, -0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 58, + "s": [367.803, 167.28, 0], + "to": [-0.003, 0.077, 0], + "ti": [0.005, -0.038, 0] + }, + { "t": 59, "s": [367.776, 167.508, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.282, 0.584, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 1, + "s": [72.171, 102.828, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, 1.039, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, 0.104, 0] }, + "t": 2, + "s": [75.523, 112.995, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.019, 0.877, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.304, 0.027, 0] }, + "t": 3, + "s": [123.744, 153.636, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.693, 1.033, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, 0.256, 0] }, + "t": 4, + "s": [141.925, 93.916, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.936, 0.883, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.114, 0.023, 0] }, + "t": 5, + "s": [119.587, 65.139, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.769, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.276, 0.289, 0] }, + "t": 6, + "s": [59.668, 105.203, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.003, 2.032, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.13, 0.39, 0] }, + "t": 7, + "s": [73.555, 121.412, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.032, 0.905, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.003, 0.077, 0] }, + "t": 8, + "s": [98.171, 125.813, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.887, 1.503, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.023, 0.67, 0] }, + "t": 9, + "s": [72.643, 66.925, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.904, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.315, 0.071, 0] }, + "t": 10, + "s": [108.084, 58.564, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.479, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.612, -0.05, 0] }, + "t": 11, + "s": [120.859, 117.368, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.764, 0.88, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, -0.052, 0] }, + "t": 12, + "s": [122.874, 80.731, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.916, 1.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.129, 0.273, 0] }, + "t": 13, + "s": [109.267, 103.32, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.633, 1.171, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [12.53, 0.011, 0] }, + "t": 14, + "s": [84.332, 113.266, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.72, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, 0.056, 0] }, + "t": 15, + "s": [84.165, 101.864, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.993, 0.575, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.119, -0.115, 0] }, + "t": 16, + "s": [89.607, 136.724, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.905, 0.946, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.007, 0.104, 0] }, + "t": 17, + "s": [102.429, 122.041, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.566, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.667, -0.15, 0] }, + "t": 18, + "s": [90.653, 61.798, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.025, 1.312, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, -0.274, 0] }, + "t": 19, + "s": [88.97, 83.343, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.879, 0.882, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.019, 0.066, 0] }, + "t": 20, + "s": [122.282, 78.321, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.099, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.27, 0.282, 0] }, + "t": 21, + "s": [78.796, 102.131, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.927, 5.118, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, 0.945, 0] }, + "t": 22, + "s": [59.361, 112.137, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.136, 0.975, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.587, 0.082, 0] }, + "t": 23, + "s": [102.002, 113.104, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.921, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.052, -0.036, 0] }, + "t": 24, + "s": [96.704, 64.316, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.841, 2.162, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.183, -1.67, 0] }, + "t": 25, + "s": [110.65, 98.408, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.252, 1.02, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.176, 0.078, 0] }, + "t": 26, + "s": [106.279, 96.788, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.859, 0.808, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, 0.016, 0] }, + "t": 27, + "s": [102.331, 121.007, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.964, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.205, 0.147, 0] }, + "t": 28, + "s": [70.842, 91.027, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.045, 0.592, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.063, -0.479, 0] }, + "t": 29, + "s": [49.193, 51.754, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.816, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.029, 0.105, 0] }, + "t": 30, + "s": [61.557, 57.576, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.115, 0.844, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.152, -0.022, 0] }, + "t": 31, + "s": [42.519, 80.235, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.93, 0.834, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.048, 0.179, 0] }, + "t": 32, + "s": [19.507, 62.344, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.463, 1.029, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.45, 0.167, 0] }, + "t": 33, + "s": [74.401, 46.72, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.852, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, 0.021, 0] }, + "t": 34, + "s": [65.831, 31.185, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.744, 1.068, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.12, 0.191, 0] }, + "t": 35, + "s": [19.228, 52.105, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.91, 0.811, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.124, 0.037, 0] }, + "t": 36, + "s": [38.347, 68.326, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.615, 1.069, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.166, 0.149, 0] }, + "t": 37, + "s": [77.863, 38.956, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.995, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.038, 0] }, + "t": 38, + "s": [80.904, 1.852, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 0.924, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, -0.006, 0] }, + "t": 39, + "s": [55.41, 69.603, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [4.375, 0.208, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.748, -0.921, 0] }, + "t": 40, + "s": [31.879, 6.237, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 1.05, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, 0.093, 0] }, + "t": 41, + "s": [31.143, 11.494, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.257, 0.972, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.59, 0.031, 0] }, + "t": 42, + "s": [61.679, 56.19, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.875, 0.989, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.063, -0.042, 0] }, + "t": 43, + "s": [66.703, -15.414, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.777, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.252, -0.012, 0] }, + "t": 44, + "s": [46.165, 32.254, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.071, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.133, -0.048, 0] }, + "t": 45, + "s": [36.01, -9.217, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.042, 0.895, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.166, 0] }, + "t": 46, + "s": [18.977, 17.016, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.64, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.028, 0.41, 0] }, + "t": 47, + "s": [50.584, 43.433, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 1.026, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.054, 0.108, 0] }, + "t": 48, + "s": [3.2, 50.175, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.826, 0.687, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.121, 0.02, 0] }, + "t": 49, + "s": [31.978, 72.587, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.958, 0.985, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.16, 0.114, 0] }, + "t": 50, + "s": [20.225, 43.283, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.531, 0.899, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.084, -0.019, 0] }, + "t": 51, + "s": [7.424, -37.423, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 0.885, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.101, 0.475, 0] }, + "t": 52, + "s": [13.811, 28.463, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.207, 0.722, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.872, 0.302, 0] }, + "t": 53, + "s": [43.338, 42.467, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.09, 0.119, 0] }, + "t": 54, + "s": [40.761, 47.811, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.074, 0.996, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.092, -0.177, 0] }, + "t": 55, + "s": [6.006, 60.269, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 2.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.039, -0.004, 0] }, + "t": 56, + "s": [22.502, 56.273, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.823, 0.991, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.12, 0.077, 0] }, + "t": 57, + "s": [-8.669, 60.085, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.158, -0.01, 0] }, + "t": 58, + "s": [4.137, 9.589, 100] + }, + { "t": 59, "s": [18.516, 54.805, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 1, + "op": 60, + "st": 1, + "bm": 0 + }, + { + "ddd": 0, + "ind": 26, + "ty": 4, + "nm": "Shape Layer 26", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 4, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 31, + "s": [100] + }, + { "t": 47, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 92, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.589 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 4, + "s": [269.491, 306.01, 0], + "to": [0.367, 0.261, 0], + "ti": [-1.762, -1.355, 0] + }, + { + "i": { "x": 0.833, "y": 0.764 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 5, + "s": [271.692, 307.579, 0], + "to": [1.762, 1.355, 0], + "ti": [-4.055, -2.961, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 6, + "s": [280.065, 314.139, 0], + "to": [4.055, 2.961, 0], + "ti": [-5.763, -3.712, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 7, + "s": [296.024, 325.342, 0], + "to": [5.763, 3.712, 0], + "ti": [-5.909, -3.26, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 8, + "s": [314.641, 336.411, 0], + "to": [5.909, 3.26, 0], + "ti": [-5.199, -2.461, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 9, + "s": [331.476, 344.903, 0], + "to": [5.199, 2.461, 0], + "ti": [-4.435, -1.834, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 10, + "s": [345.833, 351.179, 0], + "to": [4.435, 1.834, 0], + "ti": [-3.802, -1.398, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 11, + "s": [358.083, 355.908, 0], + "to": [3.802, 1.398, 0], + "ti": [-3.292, -1.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 12, + "s": [368.642, 359.567, 0], + "to": [3.292, 1.093, 0], + "ti": [-2.886, -0.867, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 13, + "s": [377.836, 362.467, 0], + "to": [2.886, 0.867, 0], + "ti": [-2.566, -0.687, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 14, + "s": [385.959, 364.771, 0], + "to": [2.566, 0.687, 0], + "ti": [-2.306, -0.543, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 15, + "s": [393.233, 366.589, 0], + "to": [2.306, 0.543, 0], + "ti": [-2.085, -0.431, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [399.792, 368.03, 0], + "to": [2.085, 0.431, 0], + "ti": [-1.895, -0.342, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 17, + "s": [405.741, 369.174, 0], + "to": [1.895, 0.342, 0], + "ti": [-1.729, -0.272, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [411.16, 370.082, 0], + "to": [1.729, 0.272, 0], + "ti": [-1.583, -0.217, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 19, + "s": [416.115, 370.805, 0], + "to": [1.583, 0.217, 0], + "ti": [-1.452, -0.173, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 20, + "s": [420.657, 371.382, 0], + "to": [1.452, 0.173, 0], + "ti": [-1.335, -0.139, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 21, + "s": [424.829, 371.844, 0], + "to": [1.335, 0.139, 0], + "ti": [-1.229, -0.113, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [428.668, 372.218, 0], + "to": [1.229, 0.113, 0], + "ti": [-1.131, -0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [432.201, 372.525, 0], + "to": [1.131, 0.094, 0], + "ti": [-1.041, -0.08, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [435.454, 372.783, 0], + "to": [1.041, 0.08, 0], + "ti": [-0.958, -0.071, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [438.448, 373.008, 0], + "to": [0.958, 0.071, 0], + "ti": [-0.88, -0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [441.201, 373.211, 0], + "to": [0.88, 0.066, 0], + "ti": [-0.807, -0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 27, + "s": [443.727, 373.403, 0], + "to": [0.807, 0.063, 0], + "ti": [-0.738, -0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [446.042, 373.591, 0], + "to": [0.738, 0.063, 0], + "ti": [-0.673, -0.065, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [448.156, 373.783, 0], + "to": [0.673, 0.065, 0], + "ti": [-0.611, -0.069, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [450.079, 373.983, 0], + "to": [0.611, 0.069, 0], + "ti": [-0.552, -0.073, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 31, + "s": [451.822, 374.195, 0], + "to": [0.552, 0.073, 0], + "ti": [-0.495, -0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 32, + "s": [453.39, 374.419, 0], + "to": [0.495, 0.077, 0], + "ti": [-0.44, -0.082, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 33, + "s": [454.792, 374.659, 0], + "to": [0.44, 0.082, 0], + "ti": [-0.387, -0.086, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 34, + "s": [456.031, 374.911, 0], + "to": [0.387, 0.086, 0], + "ti": [-0.336, -0.09, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 35, + "s": [457.115, 375.176, 0], + "to": [0.336, 0.09, 0], + "ti": [-0.286, -0.092, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 36, + "s": [458.047, 375.45, 0], + "to": [0.286, 0.092, 0], + "ti": [-0.237, -0.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 37, + "s": [458.831, 375.73, 0], + "to": [0.237, 0.093, 0], + "ti": [-0.19, -0.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 38, + "s": [459.47, 376.01, 0], + "to": [0.19, 0.093, 0], + "ti": [-0.143, -0.09, 0] + }, + { + "i": { "x": 0.833, "y": 0.855 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 39, + "s": [459.968, 376.286, 0], + "to": [0.143, 0.09, 0], + "ti": [-0.097, -0.085, 0] + }, + { + "i": { "x": 0.833, "y": 0.857 }, + "o": { "x": 0.167, "y": 0.195 }, + "t": 40, + "s": [460.328, 376.55, 0], + "to": [0.097, 0.085, 0], + "ti": [-0.052, -0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.2 }, + "t": 41, + "s": [460.55, 376.795, 0], + "to": [0.052, 0.077, 0], + "ti": [-0.007, -0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.811 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 42, + "s": [460.639, 377.012, 0], + "to": [0.007, 0.066, 0], + "ti": [0.032, -0.061, 0] + }, + { + "i": { "x": 0.833, "y": 0.813 }, + "o": { "x": 0.167, "y": 0.149 }, + "t": 43, + "s": [460.595, 377.193, 0], + "to": [-0.032, 0.061, 0], + "ti": [0.056, -0.069, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.151 }, + "t": 44, + "s": [460.445, 377.377, 0], + "to": [-0.056, 0.069, 0], + "ti": [0.06, -0.083, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 45, + "s": [460.259, 377.605, 0], + "to": [-0.06, 0.083, 0], + "ti": [0.055, -0.097, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 46, + "s": [460.084, 377.877, 0], + "to": [-0.055, 0.097, 0], + "ti": [0.049, -0.11, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 47, + "s": [459.926, 378.189, 0], + "to": [-0.049, 0.11, 0], + "ti": [0.042, -0.121, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 48, + "s": [459.788, 378.537, 0], + "to": [-0.042, 0.121, 0], + "ti": [0.034, -0.13, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 49, + "s": [459.673, 378.915, 0], + "to": [-0.034, 0.13, 0], + "ti": [0.025, -0.138, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 50, + "s": [459.585, 379.319, 0], + "to": [-0.025, 0.138, 0], + "ti": [0.015, -0.145, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 51, + "s": [459.525, 379.745, 0], + "to": [-0.015, 0.145, 0], + "ti": [0.004, -0.15, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 52, + "s": [459.496, 380.189, 0], + "to": [-0.004, 0.15, 0], + "ti": [-0.006, -0.154, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 53, + "s": [459.499, 380.647, 0], + "to": [0.006, 0.154, 0], + "ti": [-0.017, -0.157, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 54, + "s": [459.535, 381.115, 0], + "to": [0.017, 0.157, 0], + "ti": [-0.028, -0.158, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 55, + "s": [459.603, 381.589, 0], + "to": [0.028, 0.158, 0], + "ti": [-0.039, -0.159, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 56, + "s": [459.705, 382.066, 0], + "to": [0.039, 0.159, 0], + "ti": [-0.05, -0.158, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 57, + "s": [459.838, 382.542, 0], + "to": [0.05, 0.158, 0], + "ti": [-0.059, -0.156, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 58, + "s": [460.002, 383.013, 0], + "to": [0.059, 0.156, 0], + "ti": [-0.032, -0.077, 0] + }, + { "t": 59, "s": [460.195, 383.477, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 4, + "s": [97.409, 66.055, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.753, 1.579, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.148, -0.189, 0] }, + "t": 5, + "s": [44.567, 76.147, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.004, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.126, 0.073, 0] }, + "t": 6, + "s": [63.613, 73.054, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.971, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.004, 0.009, 0] }, + "t": 7, + "s": [100.946, 97.634, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.792, 1.619, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.045, 0.494, 0] }, + "t": 8, + "s": [61.805, 70.187, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.93, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.139, 0.073, 0] }, + "t": 9, + "s": [87.307, 64.612, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.68, 0.923, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.12, -0.436, 0] }, + "t": 10, + "s": [125.487, 111.62, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.883, -3.054, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, -0.938, 0] }, + "t": 11, + "s": [109.816, 104.073, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.123, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.289, 0.085, 0] }, + "t": 12, + "s": [65.323, 104.689, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 1.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.05, -0.013, 0] }, + "t": 13, + "s": [47.252, 134.038, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.754, 0.996, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.445, 0.017, 0] }, + "t": 14, + "s": [91.917, 108.765, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 0.782, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.126, -0.004, 0] }, + "t": 15, + "s": [102.196, 140.322, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.598, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.059, 0.135, 0] }, + "t": 16, + "s": [122.314, 110.374, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 0.983, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.105, -0.179, 0] }, + "t": 17, + "s": [110.56, 62.157, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.992, 0.811, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.102, -0.022, 0] }, + "t": 18, + "s": [65.661, 77.47, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.964, 1.174, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.009, 0.149, 0] }, + "t": 19, + "s": [85.871, 65.321, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.389, 0.889, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.062, 0.056, 0] }, + "t": 20, + "s": [67.714, 49.917, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.983, 1.088, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, 0.335, 0] }, + "t": 21, + "s": [78.115, 97.527, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.976, 1.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.021, 0.043, 0] }, + "t": 22, + "s": [143.974, 113.298, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.034, 0.01, 0] }, + "t": 23, + "s": [91.205, 80.878, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.004, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, 0.012, 0] }, + "t": 24, + "s": [128.534, 117.961, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 0.878, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.004, -0.04, 0] }, + "t": 25, + "s": [81.833, 74.831, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.701, 1.076, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.245, 0.261, 0] }, + "t": 26, + "s": [130.604, 103.951, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.848, 0.884, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, 0.04, 0] }, + "t": 27, + "s": [118.24, 117.585, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 1.085, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.185, 0.297, 0] }, + "t": 28, + "s": [86.185, 91.54, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.239, 1.079, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.857, 0.042, 0] }, + "t": 29, + "s": [59.806, 81.372, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.06, 0.921, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.078, 0.041, 0] }, + "t": 30, + "s": [62.144, 101.879, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.904, 1.073, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.035, -1.454, 0] }, + "t": 31, + "s": [25.053, 61.948, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.113, 0.614, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.64, 0.039, 0] }, + "t": 32, + "s": [88.839, 64.113, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.878, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.048, 0.106, 0] }, + "t": 33, + "s": [98.389, 60.046, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.973, 1.366, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.265, -0.316, 0] }, + "t": 34, + "s": [75.918, 45.28, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.487, 0.892, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.04, 0.068, 0] }, + "t": 35, + "s": [65.601, 48.361, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.02, 1.735, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.1, 0.366, 0] }, + "t": 36, + "s": [72.571, 31.73, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.839, 1.002, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, 0.075, 0] }, + "t": 37, + "s": [108.482, 26.833, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 0.884, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.173, 0.002, 0] }, + "t": 38, + "s": [64.065, 74.946, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.807, 1.122, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.226, 0.296, 0] }, + "t": 39, + "s": [22.794, 25.686, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.039, 1.029, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.147, 0.05, 0] }, + "t": 40, + "s": [33.918, 6.407, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, 0.021, 0] }, + "t": 41, + "s": [48.539, 53.893, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.843, 1.001, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.114, -0.046, 0] }, + "t": 42, + "s": [27.022, -9.839, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.415, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.177, 0.001, 0] }, + "t": 43, + "s": [36.118, 31.361, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.042, 0.504, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, -0.476, 0] }, + "t": 44, + "s": [44.181, -10.557, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.028, 0.1, 0] }, + "t": 45, + "s": [-4.037, -4.307, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.945, 0.884, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.027, 0.248, 0] }, + "t": 46, + "s": [68.255, 26.661, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.863, 0.961, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.164, 0.298, 0] }, + "t": 47, + "s": [13.766, 42.343, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.171, -1.3, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.213, -0.072, 0] }, + "t": 48, + "s": [32.121, 48.441, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.056, 0.086, 0] }, + "t": 49, + "s": [43.941, 45.171, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.907, 0.82, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.238, -0.116, 0] }, + "t": 50, + "s": [7.866, -41.801, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.765, 0.908, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.767, 0.155, 0] }, + "t": 51, + "s": [17.231, -5.411, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 0.772, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.087, 0.843, 0] }, + "t": 52, + "s": [18.373, 36.907, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.047, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.066, 0.131, 0] }, + "t": 53, + "s": [41.417, 41.547, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.142, 1.256, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.03, -0.64, 0] }, + "t": 54, + "s": [28.526, 49.618, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.933, 1.594, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.053, 0.063, 0] }, + "t": 55, + "s": [48.627, 48.688, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.831, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.344, 0.073, 0] }, + "t": 56, + "s": [-5.742, 52.477, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.959, 1.011, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.164, -0.017, 0] }, + "t": 57, + "s": [4.853, 21.683, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.082, 0.01, 0] }, + "t": 58, + "s": [15.758, 47.142, 100] + }, + { "t": 59, "s": [10.26, 18.203, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 4, + "op": 60, + "st": 4, + "bm": 0 + }, + { + "ddd": 0, + "ind": 27, + "ty": 4, + "nm": "Shape Layer 25", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 15, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 37, + "s": [100] + }, + { "t": 53, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 92, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.59 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 10, + "s": [269.753, 298.518, 0], + "to": [0.371, -0.157, 0], + "ti": [-1.794, 0.84, 0] + }, + { + "i": { "x": 0.833, "y": 0.764 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 11, + "s": [271.976, 297.574, 0], + "to": [1.794, -0.84, 0], + "ti": [-3.913, 2.158, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 12, + "s": [280.516, 293.478, 0], + "to": [3.913, -2.158, 0], + "ti": [-5.148, 3.28, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 13, + "s": [295.452, 284.625, 0], + "to": [5.148, -3.28, 0], + "ti": [-4.973, 3.376, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 14, + "s": [311.406, 273.799, 0], + "to": [4.973, -3.376, 0], + "ti": [-4.286, 2.798, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 15, + "s": [325.289, 264.369, 0], + "to": [4.286, -2.798, 0], + "ti": [-3.685, 2.155, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 16, + "s": [337.123, 257.014, 0], + "to": [3.685, -2.155, 0], + "ti": [-3.222, 1.625, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 17, + "s": [347.398, 251.439, 0], + "to": [3.222, -1.625, 0], + "ti": [-2.85, 1.213, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 18, + "s": [356.453, 247.262, 0], + "to": [2.85, -1.213, 0], + "ti": [-2.541, 0.896, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 19, + "s": [364.5, 244.163, 0], + "to": [2.541, -0.896, 0], + "ti": [-2.276, 0.656, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 20, + "s": [371.696, 241.885, 0], + "to": [2.276, -0.656, 0], + "ti": [-2.047, 0.474, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 21, + "s": [378.157, 240.228, 0], + "to": [2.047, -0.474, 0], + "ti": [-1.845, 0.337, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [383.976, 239.042, 0], + "to": [1.845, -0.337, 0], + "ti": [-1.666, 0.235, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 23, + "s": [389.227, 238.206, 0], + "to": [1.666, -0.235, 0], + "ti": [-1.505, 0.161, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 24, + "s": [393.971, 237.63, 0], + "to": [1.505, -0.161, 0], + "ti": [-1.361, 0.108, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 25, + "s": [398.259, 237.241, 0], + "to": [1.361, -0.108, 0], + "ti": [-1.229, 0.074, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 26, + "s": [402.134, 236.98, 0], + "to": [1.229, -0.074, 0], + "ti": [-1.111, 0.051, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 27, + "s": [405.636, 236.799, 0], + "to": [1.111, -0.051, 0], + "ti": [-1.01, 0.021, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [408.801, 236.672, 0], + "to": [1.01, -0.021, 0], + "ti": [-0.926, -0.021, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 29, + "s": [411.696, 236.673, 0], + "to": [0.926, 0.021, 0], + "ti": [-0.853, -0.06, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 30, + "s": [414.357, 236.801, 0], + "to": [0.853, 0.06, 0], + "ti": [-0.787, -0.092, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 31, + "s": [416.812, 237.033, 0], + "to": [0.787, 0.092, 0], + "ti": [-0.729, -0.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 32, + "s": [419.082, 237.352, 0], + "to": [0.729, 0.118, 0], + "ti": [-0.677, -0.139, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 33, + "s": [421.188, 237.741, 0], + "to": [0.677, 0.139, 0], + "ti": [-0.631, -0.156, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 34, + "s": [423.146, 238.187, 0], + "to": [0.631, 0.156, 0], + "ti": [-0.589, -0.169, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 35, + "s": [424.973, 238.678, 0], + "to": [0.589, 0.169, 0], + "ti": [-0.552, -0.179, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 36, + "s": [426.682, 239.204, 0], + "to": [0.552, 0.179, 0], + "ti": [-0.518, -0.186, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 37, + "s": [428.285, 239.754, 0], + "to": [0.518, 0.186, 0], + "ti": [-0.488, -0.19, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 38, + "s": [429.793, 240.32, 0], + "to": [0.488, 0.19, 0], + "ti": [-0.46, -0.192, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 39, + "s": [431.212, 240.895, 0], + "to": [0.46, 0.192, 0], + "ti": [-0.433, -0.191, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 40, + "s": [432.55, 241.471, 0], + "to": [0.433, 0.191, 0], + "ti": [-0.408, -0.188, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 41, + "s": [433.811, 242.041, 0], + "to": [0.408, 0.188, 0], + "ti": [-0.384, -0.184, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 42, + "s": [434.998, 242.6, 0], + "to": [0.384, 0.184, 0], + "ti": [-0.36, -0.177, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 43, + "s": [436.114, 243.143, 0], + "to": [0.36, 0.177, 0], + "ti": [-0.337, -0.169, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 44, + "s": [437.16, 243.663, 0], + "to": [0.337, 0.169, 0], + "ti": [-0.314, -0.159, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 45, + "s": [438.136, 244.156, 0], + "to": [0.314, 0.159, 0], + "ti": [-0.29, -0.148, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 46, + "s": [439.041, 244.617, 0], + "to": [0.29, 0.148, 0], + "ti": [-0.265, -0.135, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 47, + "s": [439.873, 245.043, 0], + "to": [0.265, 0.135, 0], + "ti": [-0.239, -0.121, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 48, + "s": [440.629, 245.429, 0], + "to": [0.239, 0.121, 0], + "ti": [-0.211, -0.106, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 49, + "s": [441.306, 245.771, 0], + "to": [0.211, 0.106, 0], + "ti": [-0.188, -0.091, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 50, + "s": [441.897, 246.067, 0], + "to": [0.188, 0.091, 0], + "ti": [-0.176, -0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 51, + "s": [442.436, 246.318, 0], + "to": [0.176, 0.076, 0], + "ti": [-0.167, -0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 52, + "s": [442.952, 246.526, 0], + "to": [0.167, 0.062, 0], + "ti": [-0.154, -0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 53, + "s": [443.435, 246.688, 0], + "to": [0.154, 0.046, 0], + "ti": [-0.137, -0.029, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 54, + "s": [443.874, 246.8, 0], + "to": [0.137, 0.029, 0], + "ti": [-0.117, -0.011, 0] + }, + { + "i": { "x": 0.833, "y": 0.853 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 55, + "s": [444.258, 246.86, 0], + "to": [0.117, 0.011, 0], + "ti": [-0.092, 0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.192 }, + "t": 56, + "s": [444.574, 246.866, 0], + "to": [0.092, -0.008, 0], + "ti": [-0.065, 0.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.809 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 57, + "s": [444.81, 246.814, 0], + "to": [0.065, -0.028, 0], + "ti": [-0.052, 0.051, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.148 }, + "t": 58, + "s": [444.965, 246.7, 0], + "to": [0.052, -0.051, 0], + "ti": [-0.027, 0.032, 0] + }, + { "t": 59, "s": [445.124, 246.509, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.872, 1.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 10, + "s": [110.669, 116.358, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.04, 0.96, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.239, 0.011, 0] }, + "t": 11, + "s": [59.779, 98.507, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 1.168, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, -0.078, 0] }, + "t": 12, + "s": [32.558, 118.992, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.283, 0.983, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.327, 0.056, 0] }, + "t": 13, + "s": [72.99, 108.43, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.904, 0.749, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, -0.022, 0] }, + "t": 14, + "s": [64.776, 140.246, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.471, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.643, 0.125, 0] }, + "t": 15, + "s": [100.849, 115.061, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.917, 0.951, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, -0.015, 0] }, + "t": 16, + "s": [106.224, 64.521, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [7.839, 0.661, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-10.254, -0.119, 0] }, + "t": 17, + "s": [70.46, 107.342, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.07, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.082, 0.111, 0] }, + "t": 18, + "s": [70.749, 89.722, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.822, 0.875, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, -0.015, 0] }, + "t": 19, + "s": [46.798, 35.679, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.002, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.157, 0.249, 0] }, + "t": 20, + "s": [90.882, 81.249, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.942, 1.169, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.002, -0.177, 0] }, + "t": 21, + "s": [140.894, 104.127, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.056, 1.071, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.196, 0.056, 0] }, + "t": 22, + "s": [89.564, 96.8, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.972, 0.871, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.034, 0.038, 0] }, + "t": 23, + "s": [104.901, 119.028, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.839, 1.124, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.041, 0.236, 0] }, + "t": 24, + "s": [79.173, 77.868, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.075, 0.964, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.172, 0.05, 0] }, + "t": 25, + "s": [96.359, 55.376, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.864, 0.984, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, -0.064, 0] }, + "t": 26, + "s": [112.425, 111.326, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.964, 0.96, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.216, -0.02, 0] }, + "t": 27, + "s": [81.872, 79.606, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.136, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.063, -0.076, 0] }, + "t": 28, + "s": [62.674, 105.212, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.04, 0.329, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.052, 0.758, 0] }, + "t": 29, + "s": [73.611, 91.797, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 0.991, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, 0.095, 0] }, + "t": 30, + "s": [44.883, 90.141, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.864, 1.007, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.445, -0.009, 0] }, + "t": 31, + "s": [87.448, 78.456, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.687, 0.817, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.216, 0.007, 0] }, + "t": 32, + "s": [97.261, 88.946, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.172, 0.78, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.114, 0.153, 0] }, + "t": 33, + "s": [103.41, 77.55, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.025, 0.995, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.056, 0.134, 0] }, + "t": 34, + "s": [120.354, 63.853, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 0.776, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.019, -0.005, 0] }, + "t": 35, + "s": [68.478, 41.315, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.781, 1.002, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.226, 0.133, 0] }, + "t": 36, + "s": [135.85, 62.489, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.836, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, 0.002, 0] }, + "t": 37, + "s": [117.729, 98.108, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.955, 0.732, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.17, 0.45, 0] }, + "t": 38, + "s": [88.261, 61.749, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.161, 0.879, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.097, 0.121, 0] }, + "t": 39, + "s": [59.775, 53.492, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.268, 0] }, + "t": 40, + "s": [72.912, 35.197, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.014, 1.011, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.932, 0.009, 0] }, + "t": 41, + "s": [34.35, 26.941, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.166, 0.799, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, 0.01, 0] }, + "t": 42, + "s": [35.945, 36.212, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.01, 1.008, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.142, 0] }, + "t": 43, + "s": [53.22, 25.739, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.804, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.009, 0.007, 0] }, + "t": 44, + "s": [1.613, 10.927, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.916, 0.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.054, 0.145, 0] }, + "t": 45, + "s": [59.191, 27.12, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [32.334, 1.954, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [28.082, -2.647, 0] }, + "t": 46, + "s": [24.376, 49.1, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 1.605, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.083, 0.077, 0] }, + "t": 47, + "s": [24.272, 48.429, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.911, 0.914, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.066, 0.073, 0] }, + "t": 48, + "s": [63.337, 56.778, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.402, 1.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.325, 2.783, 0] }, + "t": 49, + "s": [41.555, -12.234, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.891, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, 0.076, 0] }, + "t": 50, + "s": [40.094, -14.365, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.348, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.357, 0.224, 0] }, + "t": 51, + "s": [16.969, 11.25, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.893, 1.059, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, -0.033, 0] }, + "t": 52, + "s": [9.934, 26.464, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.223, 1.041, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.372, 0.034, 0] }, + "t": 53, + "s": [46.338, 15.586, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.949, 0.977, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, 0.028, 0] }, + "t": 54, + "s": [56.833, 34.129, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.872, 0.807, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.133, -0.032, 0] }, + "t": 55, + "s": [18.206, 6.413, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.098, 0.917, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.239, 0.147, 0] }, + "t": 56, + "s": [33.108, 26.401, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.855, -124.032, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, -45.948, 0] }, + "t": 57, + "s": [41.083, 52.674, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.195, 0.083, 0] }, + "t": 58, + "s": [23.746, 52.627, 100] + }, + { "t": 59, "s": [10.82, -18.691, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 10, + "op": 60, + "st": 10, + "bm": 0 + }, + { + "ddd": 0, + "ind": 28, + "ty": 4, + "nm": "Shape Layer 24", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 34, + "s": [100] + }, + { "t": 50, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 92, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.604 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 7, + "s": [265.04, 301.431, 0], + "to": [-0.341, -0.143, 0], + "ti": [1.527, 0.877, 0] + }, + { + "i": { "x": 0.833, "y": 0.765 }, + "o": { "x": 0.167, "y": 0.106 }, + "t": 8, + "s": [262.993, 300.574, 0], + "to": [-1.527, -0.877, 0], + "ti": [3.095, 2.404, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 9, + "s": [255.881, 296.17, 0], + "to": [-3.095, -2.404, 0], + "ti": [3.636, 3.902, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 10, + "s": [244.425, 286.149, 0], + "to": [-3.636, -3.902, 0], + "ti": [2.978, 4.369, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 11, + "s": [234.064, 272.758, 0], + "to": [-2.978, -4.369, 0], + "ti": [2.214, 3.975, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 12, + "s": [226.554, 259.936, 0], + "to": [-2.214, -3.975, 0], + "ti": [1.769, 3.38, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 13, + "s": [220.781, 248.906, 0], + "to": [-1.769, -3.38, 0], + "ti": [1.52, 2.839, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 14, + "s": [215.943, 239.657, 0], + "to": [-1.52, -2.839, 0], + "ti": [1.364, 2.397, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 15, + "s": [211.658, 231.874, 0], + "to": [-1.364, -2.397, 0], + "ti": [1.247, 2.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 16, + "s": [207.761, 225.273, 0], + "to": [-1.247, -2.04, 0], + "ti": [1.147, 1.749, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 17, + "s": [204.179, 219.632, 0], + "to": [-1.147, -1.749, 0], + "ti": [1.054, 1.508, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 18, + "s": [200.881, 214.781, 0], + "to": [-1.054, -1.508, 0], + "ti": [0.966, 1.308, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 19, + "s": [197.852, 210.583, 0], + "to": [-0.966, -1.308, 0], + "ti": [0.881, 1.139, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 20, + "s": [195.083, 206.935, 0], + "to": [-0.881, -1.139, 0], + "ti": [0.798, 0.996, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 21, + "s": [192.565, 203.748, 0], + "to": [-0.798, -0.996, 0], + "ti": [0.718, 0.875, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 22, + "s": [190.293, 200.956, 0], + "to": [-0.718, -0.875, 0], + "ti": [0.64, 0.771, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 23, + "s": [188.258, 198.5, 0], + "to": [-0.64, -0.771, 0], + "ti": [0.565, 0.681, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 24, + "s": [186.453, 196.332, 0], + "to": [-0.565, -0.681, 0], + "ti": [0.494, 0.604, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 25, + "s": [184.867, 194.413, 0], + "to": [-0.494, -0.604, 0], + "ti": [0.425, 0.537, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 26, + "s": [183.491, 192.71, 0], + "to": [-0.425, -0.537, 0], + "ti": [0.361, 0.479, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 27, + "s": [182.314, 191.193, 0], + "to": [-0.361, -0.479, 0], + "ti": [0.301, 0.428, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 28, + "s": [181.325, 189.838, 0], + "to": [-0.301, -0.428, 0], + "ti": [0.244, 0.384, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 29, + "s": [180.511, 188.625, 0], + "to": [-0.244, -0.384, 0], + "ti": [0.192, 0.346, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 30, + "s": [179.859, 187.534, 0], + "to": [-0.192, -0.346, 0], + "ti": [0.145, 0.312, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 31, + "s": [179.357, 186.551, 0], + "to": [-0.145, -0.312, 0], + "ti": [0.103, 0.284, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 32, + "s": [178.99, 185.66, 0], + "to": [-0.103, -0.284, 0], + "ti": [0.066, 0.259, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 33, + "s": [178.741, 184.85, 0], + "to": [-0.066, -0.259, 0], + "ti": [0.034, 0.238, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 34, + "s": [178.596, 184.107, 0], + "to": [-0.034, -0.238, 0], + "ti": [0.008, 0.219, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [178.536, 183.424, 0], + "to": [-0.008, -0.219, 0], + "ti": [-0.011, 0.204, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 36, + "s": [178.545, 182.791, 0], + "to": [0.011, -0.204, 0], + "ti": [-0.025, 0.191, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 37, + "s": [178.604, 182.2, 0], + "to": [0.025, -0.191, 0], + "ti": [-0.033, 0.18, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 38, + "s": [178.696, 181.645, 0], + "to": [0.033, -0.18, 0], + "ti": [-0.033, 0.171, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 39, + "s": [178.8, 181.121, 0], + "to": [0.033, -0.171, 0], + "ti": [-0.027, 0.163, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 40, + "s": [178.897, 180.622, 0], + "to": [0.027, -0.163, 0], + "ti": [-0.014, 0.157, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 41, + "s": [178.964, 180.143, 0], + "to": [0.014, -0.157, 0], + "ti": [-0.002, 0.154, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 42, + "s": [178.981, 179.68, 0], + "to": [0.002, -0.154, 0], + "ti": [-0.011, 0.158, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 43, + "s": [178.978, 179.217, 0], + "to": [0.011, -0.158, 0], + "ti": [-0.033, 0.162, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 44, + "s": [179.048, 178.732, 0], + "to": [0.033, -0.162, 0], + "ti": [-0.051, 0.161, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 45, + "s": [179.179, 178.243, 0], + "to": [0.051, -0.161, 0], + "ti": [-0.064, 0.155, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 46, + "s": [179.355, 177.765, 0], + "to": [0.064, -0.155, 0], + "ti": [-0.069, 0.148, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 47, + "s": [179.564, 177.312, 0], + "to": [0.069, -0.148, 0], + "ti": [-0.061, 0.142, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 48, + "s": [179.767, 176.879, 0], + "to": [0.061, -0.142, 0], + "ti": [-0.046, 0.136, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 49, + "s": [179.929, 176.457, 0], + "to": [0.046, -0.136, 0], + "ti": [-0.028, 0.126, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 50, + "s": [180.041, 176.061, 0], + "to": [0.028, -0.126, 0], + "ti": [-0.009, 0.113, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 51, + "s": [180.098, 175.7, 0], + "to": [0.009, -0.113, 0], + "ti": [0.012, 0.096, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 52, + "s": [180.095, 175.385, 0], + "to": [-0.012, -0.096, 0], + "ti": [0.034, 0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 53, + "s": [180.027, 175.124, 0], + "to": [-0.034, -0.077, 0], + "ti": [0.057, 0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 54, + "s": [179.891, 174.924, 0], + "to": [-0.057, -0.055, 0], + "ti": [0.08, 0.032, 0] + }, + { + "i": { "x": 0.833, "y": 0.815 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 55, + "s": [179.687, 174.792, 0], + "to": [-0.08, -0.032, 0], + "ti": [0.103, 0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.815 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 56, + "s": [179.413, 174.732, 0], + "to": [-0.103, -0.008, 0], + "ti": [0.125, -0.018, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 57, + "s": [179.07, 174.747, 0], + "to": [-0.125, 0.018, 0], + "ti": [0.147, -0.043, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 58, + "s": [178.66, 174.838, 0], + "to": [-0.147, 0.043, 0], + "ti": [0.079, -0.028, 0] + }, + { "t": 59, "s": [178.187, 175.006, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.856, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 7, + "s": [67.557, 101.258, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 0.856, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.076, -0.033, 0] }, + "t": 8, + "s": [62.081, 60.567, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.899, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.062, 0.197, 0] }, + "t": 9, + "s": [123.801, 89.604, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.652, 0.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.485, 0, 0] }, + "t": 10, + "s": [88.344, 110.822, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.902, 1.594, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.11, 1.18, 0] }, + "t": 11, + "s": [80.981, 89.674, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.494, 0.831, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.569, 0.073, 0] }, + "t": 12, + "s": [57.576, 88.067, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.815, 1.117, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.164, 0] }, + "t": 13, + "s": [53.56, 101.12, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.035, 0.99, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.152, 0.049, 0] }, + "t": 14, + "s": [81.37, 114.583, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, -0.011, 0] }, + "t": 15, + "s": [115.142, 82.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.154, 1.445, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.235, 0.491, 0] }, + "t": 16, + "s": [67.083, 110.768, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.037, 0.85, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 0.07, 0] }, + "t": 17, + "s": [79.677, 116.611, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, 1.062, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.026, 0.187, 0] }, + "t": 18, + "s": [43.885, 79.546, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.972, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.301, 0.035, 0] }, + "t": 19, + "s": [95.707, 49.721, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.783, 0.41, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.043, 0.938, 0] }, + "t": 20, + "s": [115.579, 101.629, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.957, 0.995, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, 0.097, 0] }, + "t": 21, + "s": [102.439, 106.687, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.875, 0.793, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.087, -0.005, 0] }, + "t": 22, + "s": [81.407, 137.444, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.844, 0.981, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.25, 0.14, 0] }, + "t": 23, + "s": [91.687, 108.575, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.4, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.178, -0.024, 0] }, + "t": 24, + "s": [96.813, 65.889, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 1.015, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 0.009, 0] }, + "t": 25, + "s": [101.302, 98.9, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.186, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.902, 0.013, 0] }, + "t": 26, + "s": [75.267, 62.121, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 0.887, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, 0.724, 0] }, + "t": 27, + "s": [77.47, 105.409, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.167, 2.294, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.393, 0.315, 0] }, + "t": 28, + "s": [70.35, 111.04, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.394, 0.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.056, 0.078, 0] }, + "t": 29, + "s": [68.432, 113.069, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 1.578, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.097, 1.095, 0] }, + "t": 30, + "s": [74.202, 79.548, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, 0.978, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.001, 0.073, 0] }, + "t": 31, + "s": [110.376, 76.788, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.071, 0.748, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.029, -0.029, 0] }, + "t": 32, + "s": [74.587, 98.699, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.005, 0.895, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.125, 0] }, + "t": 33, + "s": [101.235, 82.443, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 1.096, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.004, 0.401, 0] }, + "t": 34, + "s": [51.784, 49.555, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.916, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.43, 0.045, 0] }, + "t": 35, + "s": [103.982, 40.922, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [22.316, 1.143, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [6.077, -0.023, 0] }, + "t": 36, + "s": [116.519, 59.525, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.868, 1.051, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.083, 0.053, 0] }, + "t": 37, + "s": [116.693, 44.996, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.915, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.226, 0.031, 0] }, + "t": 38, + "s": [71.936, 84.414, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.19, 1.045, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [4.525, -0.385, 0] }, + "t": 39, + "s": [45.732, 21.041, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.945, 0.893, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.09, 0.029, 0] }, + "t": 40, + "s": [45.24, 32.32, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.147, 0.824, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.16, 0.379, 0] }, + "t": 41, + "s": [38.713, 14.915, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.02, 0.834, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.078, 0.158, 0] }, + "t": 42, + "s": [40.945, 10.011, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.96, 1.294, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, 0.167, 0] }, + "t": 43, + "s": [7.998, 4.532, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.811, 0.925, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.078, 0.065, 0] }, + "t": 44, + "s": [48.948, -0.907, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 2.089, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.149, -0.765, 0] }, + "t": 45, + "s": [27.778, 23.742, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.789, 1.036, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.033, 0.077, 0] }, + "t": 46, + "s": [0.947, 21.32, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.138, 0.025, 0] }, + "t": 47, + "s": [20.246, 55.394, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.839, 1.071, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.317, 0.568, 0] }, + "t": 48, + "s": [49.89, 6.617, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.533, 0.903, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.173, 0.038, 0] }, + "t": 49, + "s": [43.72, -1.776, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 1.723, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.101, 0.578, 0] }, + "t": 50, + "s": [37.975, 13.785, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.517, 1.043, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.234, 0.075, 0] }, + "t": 51, + "s": [11.499, 16.406, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 0.978, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.101, 0.028, 0] }, + "t": 52, + "s": [18.462, -8.949, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.022, 0.904, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.068, -0.031, 0] }, + "t": 53, + "s": [51.821, 29.36, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.996, 1.698, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, 0.617, 0] }, + "t": 54, + "s": [33.392, 1.359, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.888, 0.865, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.004, 0.074, 0] }, + "t": 55, + "s": [56.645, -3.016, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.486, 0.985, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.324, 0.219, 0] }, + "t": 56, + "s": [34.461, 37.994, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.009, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, -0.018, 0] }, + "t": 57, + "s": [26.772, 63.226, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.008, 0.247, 0] }, + "t": 58, + "s": [-12.998, 42.488, 100] + }, + { "t": 59, "s": [31.14, 31.954, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 7, + "op": 60, + "st": 7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 29, + "ty": 4, + "nm": "Shape Layer 23", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 5, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 32, + "s": [100] + }, + { "t": 48, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 92, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.598 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 5, + "s": [261.789, 302.009, 0], + "to": [-0.181, -0.464, 0], + "ti": [0.71, 2.293, 0] + }, + { + "i": { "x": 0.833, "y": 0.765 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 6, + "s": [260.702, 299.226, 0], + "to": [-0.71, -2.293, 0], + "ti": [1.003, 5.268, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 7, + "s": [257.531, 288.249, 0], + "to": [-1.003, -5.268, 0], + "ti": [0.104, 7.272, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 8, + "s": [254.686, 267.621, 0], + "to": [-0.104, -7.272, 0], + "ti": [-1.513, 7.003, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 9, + "s": [256.909, 244.618, 0], + "to": [1.513, -7.003, 0], + "ti": [-2.58, 5.598, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 10, + "s": [263.763, 225.603, 0], + "to": [2.58, -5.598, 0], + "ti": [-2.89, 4.322, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 11, + "s": [272.387, 211.032, 0], + "to": [2.89, -4.322, 0], + "ti": [-2.817, 3.434, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 12, + "s": [281.103, 199.67, 0], + "to": [2.817, -3.434, 0], + "ti": [-2.604, 2.843, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 13, + "s": [289.287, 190.426, 0], + "to": [2.604, -2.843, 0], + "ti": [-2.352, 2.444, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 14, + "s": [296.729, 182.612, 0], + "to": [2.352, -2.444, 0], + "ti": [-2.098, 2.172, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 15, + "s": [303.402, 175.762, 0], + "to": [2.098, -2.172, 0], + "ti": [-1.847, 1.982, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [309.316, 169.581, 0], + "to": [1.847, -1.982, 0], + "ti": [-1.599, 1.847, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [314.483, 163.871, 0], + "to": [1.599, -1.847, 0], + "ti": [-1.351, 1.749, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [318.909, 158.499, 0], + "to": [1.351, -1.749, 0], + "ti": [-1.1, 1.67, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [322.589, 153.379, 0], + "to": [1.1, -1.67, 0], + "ti": [-0.847, 1.597, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [325.509, 148.477, 0], + "to": [0.847, -1.597, 0], + "ti": [-0.598, 1.514, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [327.669, 143.798, 0], + "to": [0.598, -1.514, 0], + "ti": [-0.368, 1.415, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [329.098, 139.39, 0], + "to": [0.368, -1.415, 0], + "ti": [-0.17, 1.301, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 23, + "s": [329.877, 135.307, 0], + "to": [0.17, -1.301, 0], + "ti": [-0.012, 1.178, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 24, + "s": [330.12, 131.586, 0], + "to": [0.012, -1.178, 0], + "ti": [0.108, 1.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 25, + "s": [329.95, 128.236, 0], + "to": [-0.108, -1.057, 0], + "ti": [0.197, 0.942, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [329.473, 125.245, 0], + "to": [-0.197, -0.942, 0], + "ti": [0.245, 0.841, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [328.77, 122.586, 0], + "to": [-0.245, -0.841, 0], + "ti": [0.252, 0.756, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [328.003, 120.201, 0], + "to": [-0.252, -0.756, 0], + "ti": [0.241, 0.68, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [327.259, 118.051, 0], + "to": [-0.241, -0.68, 0], + "ti": [0.227, 0.611, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 30, + "s": [326.555, 116.118, 0], + "to": [-0.227, -0.611, 0], + "ti": [0.211, 0.546, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 31, + "s": [325.898, 114.387, 0], + "to": [-0.211, -0.546, 0], + "ti": [0.196, 0.484, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 32, + "s": [325.288, 112.845, 0], + "to": [-0.196, -0.484, 0], + "ti": [0.183, 0.426, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 33, + "s": [324.72, 111.482, 0], + "to": [-0.183, -0.426, 0], + "ti": [0.173, 0.371, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 34, + "s": [324.187, 110.287, 0], + "to": [-0.173, -0.371, 0], + "ti": [0.164, 0.318, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 35, + "s": [323.684, 109.255, 0], + "to": [-0.164, -0.318, 0], + "ti": [0.159, 0.267, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 36, + "s": [323.201, 108.379, 0], + "to": [-0.159, -0.267, 0], + "ti": [0.156, 0.217, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 37, + "s": [322.731, 107.655, 0], + "to": [-0.156, -0.217, 0], + "ti": [0.154, 0.168, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 38, + "s": [322.267, 107.078, 0], + "to": [-0.154, -0.168, 0], + "ti": [0.155, 0.121, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 39, + "s": [321.804, 106.645, 0], + "to": [-0.155, -0.121, 0], + "ti": [0.157, 0.075, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 40, + "s": [321.338, 106.352, 0], + "to": [-0.157, -0.075, 0], + "ti": [0.16, 0.031, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 41, + "s": [320.863, 106.193, 0], + "to": [-0.16, -0.031, 0], + "ti": [0.165, -0.011, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 42, + "s": [320.376, 106.164, 0], + "to": [-0.165, 0.011, 0], + "ti": [0.169, -0.052, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 43, + "s": [319.875, 106.261, 0], + "to": [-0.169, 0.052, 0], + "ti": [0.172, -0.092, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 44, + "s": [319.363, 106.479, 0], + "to": [-0.172, 0.092, 0], + "ti": [0.18, -0.125, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 45, + "s": [318.841, 106.814, 0], + "to": [-0.18, 0.125, 0], + "ti": [0.197, -0.144, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 46, + "s": [318.282, 107.227, 0], + "to": [-0.197, 0.144, 0], + "ti": [0.217, -0.157, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 47, + "s": [317.66, 107.68, 0], + "to": [-0.217, 0.157, 0], + "ti": [0.233, -0.168, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 48, + "s": [316.983, 108.169, 0], + "to": [-0.233, 0.168, 0], + "ti": [0.246, -0.177, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 49, + "s": [316.262, 108.687, 0], + "to": [-0.246, 0.177, 0], + "ti": [0.254, -0.183, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 50, + "s": [315.509, 109.229, 0], + "to": [-0.254, 0.183, 0], + "ti": [0.259, -0.188, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 51, + "s": [314.735, 109.788, 0], + "to": [-0.259, 0.188, 0], + "ti": [0.258, -0.189, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 52, + "s": [313.957, 110.355, 0], + "to": [-0.258, 0.189, 0], + "ti": [0.251, -0.187, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 53, + "s": [313.19, 110.921, 0], + "to": [-0.251, 0.187, 0], + "ti": [0.238, -0.182, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 54, + "s": [312.452, 111.477, 0], + "to": [-0.238, 0.182, 0], + "ti": [0.219, -0.173, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 55, + "s": [311.761, 112.011, 0], + "to": [-0.219, 0.173, 0], + "ti": [0.192, -0.16, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 56, + "s": [311.139, 112.513, 0], + "to": [-0.192, 0.16, 0], + "ti": [0.164, -0.143, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 57, + "s": [310.606, 112.97, 0], + "to": [-0.164, 0.143, 0], + "ti": [0.139, -0.125, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 58, + "s": [310.154, 113.373, 0], + "to": [-0.139, 0.125, 0], + "ti": [0.064, -0.057, 0] + }, + { "t": 59, "s": [309.77, 113.717, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.657, 0.977, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 5, + "s": [122.178, 94.449, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.995, 0.673, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.11, -0.032, 0] }, + "t": 6, + "s": [102.174, 113.837, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.918, 0.997, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.005, 0.112, 0] }, + "t": 7, + "s": [39.796, 99.783, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.373, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-5.85, -0.003, 0] }, + "t": 8, + "s": [98.461, 58.708, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.007, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, -0.182, 0] }, + "t": 9, + "s": [97.637, 98.226, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.861, -0.461, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, 2.089, 0] }, + "t": 10, + "s": [121.922, 85.826, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.953, 1.17, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.208, 0.088, 0] }, + "t": 11, + "s": [95.646, 85.311, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.37, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.109, 0.056, 0] }, + "t": 12, + "s": [78.043, 76.794, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.019, 1.331, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, 1.985, 0] }, + "t": 13, + "s": [85.681, 102.643, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 1.177, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, 0.067, 0] }, + "t": 14, + "s": [135.804, 103.775, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 0.896, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.12, 0.057, 0] }, + "t": 15, + "s": [74.18, 98.145, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.067, 2.296, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.019, 0.418, 0] }, + "t": 16, + "s": [99.49, 115.703, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.037, 0.078, 0] }, + "t": 17, + "s": [78.946, 120.079, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.978, 0.68, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, -0.197, 0] }, + "t": 18, + "s": [115.943, 47.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.04, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.029, 0.113, 0] }, + "t": 19, + "s": [90.116, 69.173, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.011, 1.066, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, 0.387, 0] }, + "t": 20, + "s": [109.209, 130.363, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.972, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.01, 0.037, 0] }, + "t": 21, + "s": [80.945, 147.149, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.048, 0.791, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.043, 0.733, 0] }, + "t": 22, + "s": [112.856, 117.083, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.002, 0.619, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.03, 0.139, 0] }, + "t": 23, + "s": [91.758, 113.226, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.913, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.002, 0.107, 0] }, + "t": 24, + "s": [124.953, 107.402, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.03, 0.669, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.871, -0.086, 0] }, + "t": 25, + "s": [90.896, 86.565, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.06, 0.86, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, 0.111, 0] }, + "t": 26, + "s": [89.309, 96.814, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.994, 1.197, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.035, 0.207, 0] }, + "t": 27, + "s": [71.266, 127.218, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.064, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.007, 0.059, 0] }, + "t": 28, + "s": [102.251, 147.752, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.023, 1.152, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.036, 1.009, 0] }, + "t": 29, + "s": [73.55, 78.754, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.89, 0.917, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.018, 0.054, 0] }, + "t": 30, + "s": [124.448, 72.546, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, -191.097, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.347, -188.615, 0] }, + "t": 31, + "s": [59.508, 90.091, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.122, 0.759, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.254, 0.083, 0] }, + "t": 32, + "s": [39, 90.083, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, 0.127, 0] }, + "t": 33, + "s": [44.062, 72.23, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.05, 0.825, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.262, -1.141, 0] }, + "t": 34, + "s": [92.349, 38.4, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.058, -0.83, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.031, 0.159, 0] }, + "t": 35, + "s": [80.711, 40.702, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.872, 0.959, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.034, 0.087, 0] }, + "t": 36, + "s": [99.332, 43.228, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.945, 0.925, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.238, -0.08, 0] }, + "t": 37, + "s": [67.744, 96.178, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.837, 1.576, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.16, -0.761, 0] }, + "t": 38, + "s": [50.721, 69.109, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.787, 0.792, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.171, 0.073, 0] }, + "t": 39, + "s": [56.555, 71.779, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.453, 0.836, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.137, 0.139, 0] }, + "t": 40, + "s": [62.129, 50.654, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 0.889, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, 0.169, 0] }, + "t": 41, + "s": [70.779, 19.084, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.921, 1.022, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.02, 0.334, 0] }, + "t": 42, + "s": [15.062, -11.663, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.296, 0.99, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.554, 0.018, 0] }, + "t": 43, + "s": [59.871, -21.902, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 1.249, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, -0.012, 0] }, + "t": 44, + "s": [57.59, -8.938, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.049, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, 0.062, 0] }, + "t": 45, + "s": [24.406, -20.323, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.841, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.031, -0.187, 0] }, + "t": 46, + "s": [-6.116, 25.019, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.989, 1.089, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.626, 0.175, 0] }, + "t": 47, + "s": [42.39, 11.059, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.274, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.013, 0.043, 0] }, + "t": 48, + "s": [45.011, -1.68, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.577, 1.034, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, 0.225, 0] }, + "t": 49, + "s": [42.735, 24.617, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.024, 0] }, + "t": 50, + "s": [52.491, 40.139, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.91, 0.866, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, -0.326, 0] }, + "t": 51, + "s": [-24.813, 18.208, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.149, 1.734, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.154, 0.22, 0] }, + "t": 52, + "s": [29.263, 22.673, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.047, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, 0.075, 0] }, + "t": 53, + "s": [33.471, 25.402, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.891, 0.786, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.03, -0.07, 0] }, + "t": 54, + "s": [72.245, -1.354, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 0.815, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.355, 0.137, 0] }, + "t": 55, + "s": [11.503, 13.161, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.127, 0.918, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.26, 0.152, 0] }, + "t": 56, + "s": [-7.15, 35.893, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.908, -1.79, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, -4.527, 0] }, + "t": 57, + "s": [-2.619, 63.648, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.867, 0.086, 0] }, + "t": 58, + "s": [40.328, 63.147, 100] + }, + { "t": 59, "s": [44.897, 46.852, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 5, + "op": 60, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 30, + "ty": 4, + "nm": "Shape Layer 22", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 2, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 29, + "s": [100] + }, + { "t": 45, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 92, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.555 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [263.182, 299.465, 0], + "to": [-0.365, 0.027, 0], + "ti": [1.949, -0.179, 0] + }, + { + "i": { "x": 0.833, "y": 0.762 }, + "o": { "x": 0.167, "y": 0.103 }, + "t": 3, + "s": [260.99, 299.63, 0], + "to": [-1.949, 0.179, 0], + "ti": [4.498, -0.649, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.128 }, + "t": 4, + "s": [251.489, 300.54, 0], + "to": [-4.498, 0.649, 0], + "ti": [6.073, -1.426, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 5, + "s": [234.001, 303.526, 0], + "to": [-6.073, 1.426, 0], + "ti": [5.777, -2.109, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 6, + "s": [215.049, 309.096, 0], + "to": [-5.777, 2.109, 0], + "ti": [4.639, -2.46, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 7, + "s": [199.338, 316.18, 0], + "to": [-4.639, 2.46, 0], + "ti": [3.563, -2.581, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 8, + "s": [187.213, 323.857, 0], + "to": [-3.563, 2.581, 0], + "ti": [2.716, -2.584, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 9, + "s": [177.957, 331.668, 0], + "to": [-2.716, 2.584, 0], + "ti": [2.065, -2.517, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 10, + "s": [170.915, 339.358, 0], + "to": [-2.065, 2.517, 0], + "ti": [1.564, -2.411, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 11, + "s": [165.569, 346.772, 0], + "to": [-1.564, 2.411, 0], + "ti": [1.165, -2.278, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 12, + "s": [161.531, 353.821, 0], + "to": [-1.165, 2.278, 0], + "ti": [0.843, -2.131, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 13, + "s": [158.58, 360.44, 0], + "to": [-0.843, 2.131, 0], + "ti": [0.594, -1.982, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 14, + "s": [156.475, 366.609, 0], + "to": [-0.594, 1.982, 0], + "ti": [0.404, -1.836, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 15, + "s": [155.019, 372.333, 0], + "to": [-0.404, 1.836, 0], + "ti": [0.261, -1.696, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 16, + "s": [154.052, 377.626, 0], + "to": [-0.261, 1.696, 0], + "ti": [0.155, -1.565, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 17, + "s": [153.453, 382.511, 0], + "to": [-0.155, 1.565, 0], + "ti": [0.078, -1.441, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 18, + "s": [153.124, 387.013, 0], + "to": [-0.078, 1.441, 0], + "ti": [0.024, -1.327, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 19, + "s": [152.987, 391.16, 0], + "to": [-0.024, 1.327, 0], + "ti": [-0.012, -1.222, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 20, + "s": [152.981, 394.977, 0], + "to": [0.012, 1.222, 0], + "ti": [-0.034, -1.124, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 21, + "s": [153.059, 398.49, 0], + "to": [0.034, 1.124, 0], + "ti": [-0.044, -1.033, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [153.183, 401.72, 0], + "to": [0.044, 1.033, 0], + "ti": [-0.045, -0.949, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [153.322, 404.688, 0], + "to": [0.045, 0.949, 0], + "ti": [-0.039, -0.87, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [153.452, 407.413, 0], + "to": [0.039, 0.87, 0], + "ti": [-0.028, -0.797, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [153.556, 409.91, 0], + "to": [0.028, 0.797, 0], + "ti": [-0.013, -0.729, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [153.62, 412.195, 0], + "to": [0.013, 0.729, 0], + "ti": [0.005, -0.666, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [153.633, 414.284, 0], + "to": [-0.005, 0.666, 0], + "ti": [0.025, -0.607, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [153.589, 416.19, 0], + "to": [-0.025, 0.607, 0], + "ti": [0.045, -0.552, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [153.484, 417.926, 0], + "to": [-0.045, 0.552, 0], + "ti": [0.066, -0.501, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [153.316, 419.502, 0], + "to": [-0.066, 0.501, 0], + "ti": [0.086, -0.452, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 31, + "s": [153.086, 420.929, 0], + "to": [-0.086, 0.452, 0], + "ti": [0.105, -0.407, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 32, + "s": [152.797, 422.216, 0], + "to": [-0.105, 0.407, 0], + "ti": [0.122, -0.364, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [152.454, 423.37, 0], + "to": [-0.122, 0.364, 0], + "ti": [0.137, -0.324, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 34, + "s": [152.063, 424.4, 0], + "to": [-0.137, 0.324, 0], + "ti": [0.149, -0.286, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [151.631, 425.314, 0], + "to": [-0.149, 0.286, 0], + "ti": [0.157, -0.251, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 36, + "s": [151.17, 426.118, 0], + "to": [-0.157, 0.251, 0], + "ti": [0.161, -0.217, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 37, + "s": [150.689, 426.818, 0], + "to": [-0.161, 0.217, 0], + "ti": [0.161, -0.186, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 38, + "s": [150.202, 427.422, 0], + "to": [-0.161, 0.186, 0], + "ti": [0.156, -0.157, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 39, + "s": [149.722, 427.936, 0], + "to": [-0.156, 0.157, 0], + "ti": [0.145, -0.13, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 40, + "s": [149.266, 428.364, 0], + "to": [-0.145, 0.13, 0], + "ti": [0.13, -0.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 41, + "s": [148.849, 428.714, 0], + "to": [-0.13, 0.103, 0], + "ti": [0.112, -0.075, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 42, + "s": [148.487, 428.98, 0], + "to": [-0.112, 0.075, 0], + "ti": [0.095, -0.052, 0] + }, + { + "i": { "x": 0.833, "y": 0.853 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 43, + "s": [148.176, 429.161, 0], + "to": [-0.095, 0.052, 0], + "ti": [0.076, -0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.858 }, + "o": { "x": 0.167, "y": 0.193 }, + "t": 44, + "s": [147.92, 429.292, 0], + "to": [-0.076, 0.036, 0], + "ti": [0.058, -0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.864 }, + "o": { "x": 0.167, "y": 0.202 }, + "t": 45, + "s": [147.718, 429.375, 0], + "to": [-0.058, 0.02, 0], + "ti": [0.041, -0.005, 0] + }, + { + "i": { "x": 0.833, "y": 0.858 }, + "o": { "x": 0.167, "y": 0.214 }, + "t": 46, + "s": [147.57, 429.411, 0], + "to": [-0.041, 0.005, 0], + "ti": [0.024, 0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.811 }, + "o": { "x": 0.167, "y": 0.201 }, + "t": 47, + "s": [147.473, 429.404, 0], + "to": [-0.024, -0.009, 0], + "ti": [0.007, 0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.791 }, + "o": { "x": 0.167, "y": 0.149 }, + "t": 48, + "s": [147.427, 429.356, 0], + "to": [-0.007, -0.022, 0], + "ti": [-0.008, 0.035, 0] + }, + { + "i": { "x": 0.833, "y": 0.803 }, + "o": { "x": 0.167, "y": 0.139 }, + "t": 49, + "s": [147.429, 429.27, 0], + "to": [0.008, -0.035, 0], + "ti": [-0.023, 0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.812 }, + "o": { "x": 0.167, "y": 0.144 }, + "t": 50, + "s": [147.476, 429.149, 0], + "to": [0.023, -0.046, 0], + "ti": [-0.037, 0.056, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.15 }, + "t": 51, + "s": [147.567, 428.995, 0], + "to": [0.037, -0.056, 0], + "ti": [-0.05, 0.065, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 52, + "s": [147.698, 428.811, 0], + "to": [0.05, -0.065, 0], + "ti": [-0.061, 0.073, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 53, + "s": [147.866, 428.602, 0], + "to": [0.061, -0.073, 0], + "ti": [-0.072, 0.08, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 54, + "s": [148.067, 428.371, 0], + "to": [0.072, -0.08, 0], + "ti": [-0.081, 0.086, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 55, + "s": [148.297, 428.121, 0], + "to": [0.081, -0.086, 0], + "ti": [-0.088, 0.09, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 56, + "s": [148.552, 427.857, 0], + "to": [0.088, -0.09, 0], + "ti": [-0.094, 0.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 57, + "s": [148.827, 427.581, 0], + "to": [0.094, -0.093, 0], + "ti": [-0.099, 0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 58, + "s": [149.118, 427.299, 0], + "to": [0.099, -0.094, 0], + "ti": [-0.05, 0.047, 0] + }, + { "t": 59, "s": [149.419, 427.014, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.986, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 2, + "s": [78.01, 99.254, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 0.531, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.017, -0.276, 0] }, + "t": 3, + "s": [128.233, 72.965, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.337, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.687, 0.101, 0] }, + "t": 4, + "s": [86.694, 79.056, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.838, 1.122, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, 0.245, 0] }, + "t": 5, + "s": [91.188, 107.271, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.041, 0.842, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.172, 0.05, 0] }, + "t": 6, + "s": [68.543, 121.799, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.872, 0.956, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, 0.177, 0] }, + "t": 7, + "s": [47.195, 85.924, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.787, 0.859, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.24, -0.094, 0] }, + "t": 8, + "s": [79.057, 53.992, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.016, 0.785, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.137, 0.203, 0] }, + "t": 9, + "s": [95.971, 69, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 0.823, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.013, 0.136, 0] }, + "t": 10, + "s": [122.24, 79.447, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.768, 0.977, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.111, 0.157, 0] }, + "t": 11, + "s": [91.043, 95.99, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.026, 0.806, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.13, -0.032, 0] }, + "t": 12, + "s": [104.449, 114.638, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 1.057, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.146, 0] }, + "t": 13, + "s": [128.392, 101.122, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.99, 0.907, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.071, 0.034, 0] }, + "t": 14, + "s": [96.902, 83.222, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.026, 1.705, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.011, 0.803, 0] }, + "t": 15, + "s": [113.87, 113.437, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.96, 0.836, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.075, 0] }, + "t": 16, + "s": [98.911, 116.933, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.845, 1.094, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.077, 0.169, 0] }, + "t": 17, + "s": [118.545, 83.843, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.612, 0.887, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.18, 0.044, 0] }, + "t": 18, + "s": [108.334, 51.632, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.07, 1.117, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.106, 0.317, 0] }, + "t": 19, + "s": [99.536, 120.079, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.987, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.049, 0] }, + "t": 20, + "s": [67.373, 144.525, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.993, 0.851, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.016, -0.19, 0] }, + "t": 21, + "s": [126.372, 85.891, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.911, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.008, 0.19, 0] }, + "t": 22, + "s": [76.632, 103.785, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.779, 0.97, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.349, 0.009, 0] }, + "t": 23, + "s": [122.04, 117.809, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.843, 1.086, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.075, -0.046, 0] }, + "t": 24, + "s": [125.029, 102.081, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.135, 1.161, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.177, 0.042, 0] }, + "t": 25, + "s": [94.09, 112.18, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.981, 0.983, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.052, 0.055, 0] }, + "t": 26, + "s": [66.677, 91.705, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 0.885, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.024, -0.021, 0] }, + "t": 27, + "s": [138.63, 151.835, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.1, 0.917, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.153, 0.304, 0] }, + "t": 28, + "s": [82.794, 103.616, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.825, 23.963, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, -14.676, 0] }, + "t": 29, + "s": [102.519, 85.419, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.959, 0.97, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.159, 0.083, 0] }, + "t": 30, + "s": [59.163, 85.522, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.781, 1.06, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.081, -0.046, 0] }, + "t": 31, + "s": [11.254, 57.108, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.97, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.134, 0.035, 0] }, + "t": 32, + "s": [35.57, 75.366, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.91, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.047, -0.198, 0] }, + "t": 33, + "s": [75.263, 44.021, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.16, 1.441, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.081, -0.038, 0] }, + "t": 34, + "s": [49.845, 53.322, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.019, 0.947, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.09, 0.07, 0] }, + "t": 35, + "s": [47.721, 46.924, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, -0.142, 0] }, + "t": 36, + "s": [20.292, 87.156, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.992, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.252, -0.131, 0] }, + "t": 37, + "s": [54.089, 72.277, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.683, 0.671, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.008, 0.009, 0] }, + "t": 38, + "s": [45.702, 78.056, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.156, 0.664, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.112, 0] }, + "t": 39, + "s": [53.33, 71.575, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.955, 0.899, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 0.111, 0] }, + "t": 40, + "s": [74.741, 52.442, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.831, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.096, 0.48, 0] }, + "t": 41, + "s": [13.206, -5.553, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, 1.051, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.164, -0.015, 0] }, + "t": 42, + "s": [41.869, -17.736, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.774, 1.016, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.027, 0.032, 0] }, + "t": 43, + "s": [71.33, -7.435, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.832, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.132, 0.013, 0] }, + "t": 44, + "s": [49.137, -24.086, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.882, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.056, 0.165, 0] }, + "t": 45, + "s": [11.219, -4.255, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.917, 0.797, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.282, -0.239, 0] }, + "t": 46, + "s": [33.923, 16.004, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [26.628, 1.515, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-41.355, 0.141, 0] }, + "t": 47, + "s": [43.431, 10.768, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.023, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.083, 0.072, 0] }, + "t": 48, + "s": [43.412, 3.234, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 0.76, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.077, -0.285, 0] }, + "t": 49, + "s": [49.311, 57.286, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.757, 0.888, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.255, 0.128, 0] }, + "t": 50, + "s": [-29.011, 45.06, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.807, 1.116, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.127, 0.328, 0] }, + "t": 51, + "s": [-9.692, 22.004, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.012, 0.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.147, 0.048, 0] }, + "t": 52, + "s": [27.268, 14.157, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.85, 0.798, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.01, -0.607, 0] }, + "t": 53, + "s": [75.93, 32.89, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.972, 0.796, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.187, 0.142, 0] }, + "t": 54, + "s": [20.351, 30.629, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.765, 1.805, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.041, 0.141, 0] }, + "t": 55, + "s": [-24.176, 27.418, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.129, 0.076, 0] }, + "t": 56, + "s": [5.634, 22.754, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.972, 0.674, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.092, -0.394, 0] }, + "t": 57, + "s": [59.79, 72.494, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.043, 0.112, 0] }, + "t": 58, + "s": [34.087, 63.804, 100] + }, + { "t": 59, "s": [51.017, 38.534, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 60, + "st": 2, + "bm": 0 + }, + { + "ddd": 0, + "ind": 31, + "ty": 4, + "nm": "Shape Layer 21", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 8, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 35, + "s": [100] + }, + { "t": 51, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 92, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.611 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [268.269, 306.17, 0], + "to": [0.003, 0.494, 0], + "ti": [-0.124, -2.305, 0] + }, + { + "i": { "x": 0.833, "y": 0.766 }, + "o": { "x": 0.167, "y": 0.106 }, + "t": 9, + "s": [268.288, 309.137, 0], + "to": [0.124, 2.305, 0], + "ti": [-0.683, -5.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 10, + "s": [269.014, 319.997, 0], + "to": [0.683, 5.046, 0], + "ti": [-1.89, -6.606, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 11, + "s": [272.384, 339.414, 0], + "to": [1.89, 6.606, 0], + "ti": [-3.289, -5.823, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 12, + "s": [280.355, 359.634, 0], + "to": [3.289, 5.823, 0], + "ti": [-4.111, -3.921, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 13, + "s": [292.117, 374.353, 0], + "to": [4.111, 3.921, 0], + "ti": [-4.169, -2.298, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 14, + "s": [305.021, 383.162, 0], + "to": [4.169, 2.298, 0], + "ti": [-3.808, -1.326, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 15, + "s": [317.131, 388.142, 0], + "to": [3.808, 1.326, 0], + "ti": [-3.36, -0.831, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 16, + "s": [327.87, 391.116, 0], + "to": [3.36, 0.831, 0], + "ti": [-2.951, -0.601, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 17, + "s": [337.294, 393.129, 0], + "to": [2.951, 0.601, 0], + "ti": [-2.599, -0.51, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 18, + "s": [345.577, 394.723, 0], + "to": [2.599, 0.51, 0], + "ti": [-2.295, -0.495, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 19, + "s": [352.885, 396.19, 0], + "to": [2.295, 0.495, 0], + "ti": [-2.032, -0.524, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [359.349, 397.694, 0], + "to": [2.032, 0.524, 0], + "ti": [-1.8, -0.577, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [365.075, 399.331, 0], + "to": [1.8, 0.577, 0], + "ti": [-1.589, -0.643, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [370.148, 401.158, 0], + "to": [1.589, 0.643, 0], + "ti": [-1.392, -0.71, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [374.61, 403.19, 0], + "to": [1.392, 0.71, 0], + "ti": [-1.21, -0.771, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [378.501, 405.417, 0], + "to": [1.21, 0.771, 0], + "ti": [-1.047, -0.823, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 25, + "s": [381.873, 407.817, 0], + "to": [1.047, 0.823, 0], + "ti": [-0.897, -0.852, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 26, + "s": [384.78, 410.354, 0], + "to": [0.897, 0.852, 0], + "ti": [-0.758, -0.847, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [387.255, 412.931, 0], + "to": [0.758, 0.847, 0], + "ti": [-0.635, -0.817, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [389.33, 415.438, 0], + "to": [0.635, 0.817, 0], + "ti": [-0.53, -0.777, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [391.063, 417.835, 0], + "to": [0.53, 0.777, 0], + "ti": [-0.442, -0.729, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [392.509, 420.098, 0], + "to": [0.442, 0.729, 0], + "ti": [-0.37, -0.677, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 31, + "s": [393.717, 422.209, 0], + "to": [0.37, 0.677, 0], + "ti": [-0.311, -0.623, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 32, + "s": [394.73, 424.158, 0], + "to": [0.311, 0.623, 0], + "ti": [-0.263, -0.569, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 33, + "s": [395.584, 425.945, 0], + "to": [0.263, 0.569, 0], + "ti": [-0.224, -0.517, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 34, + "s": [396.309, 427.572, 0], + "to": [0.224, 0.517, 0], + "ti": [-0.192, -0.467, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 35, + "s": [396.928, 429.046, 0], + "to": [0.192, 0.467, 0], + "ti": [-0.166, -0.419, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 36, + "s": [397.461, 430.372, 0], + "to": [0.166, 0.419, 0], + "ti": [-0.144, -0.373, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 37, + "s": [397.921, 431.558, 0], + "to": [0.144, 0.373, 0], + "ti": [-0.125, -0.33, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 38, + "s": [398.322, 432.612, 0], + "to": [0.125, 0.33, 0], + "ti": [-0.11, -0.29, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 39, + "s": [398.672, 433.54, 0], + "to": [0.11, 0.29, 0], + "ti": [-0.096, -0.253, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 40, + "s": [398.98, 434.351, 0], + "to": [0.096, 0.253, 0], + "ti": [-0.085, -0.219, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 41, + "s": [399.251, 435.056, 0], + "to": [0.085, 0.219, 0], + "ti": [-0.075, -0.187, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 42, + "s": [399.491, 435.663, 0], + "to": [0.075, 0.187, 0], + "ti": [-0.066, -0.157, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 43, + "s": [399.701, 436.178, 0], + "to": [0.066, 0.157, 0], + "ti": [-0.058, -0.129, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 44, + "s": [399.886, 436.606, 0], + "to": [0.058, 0.129, 0], + "ti": [-0.05, -0.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 45, + "s": [400.047, 436.953, 0], + "to": [0.05, 0.103, 0], + "ti": [-0.042, -0.078, 0] + }, + { + "i": { "x": 0.833, "y": 0.858 }, + "o": { "x": 0.167, "y": 0.194 }, + "t": 46, + "s": [400.184, 437.223, 0], + "to": [0.042, 0.078, 0], + "ti": [-0.035, -0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.203 }, + "t": 47, + "s": [400.3, 437.422, 0], + "to": [0.035, 0.055, 0], + "ti": [-0.029, -0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 48, + "s": [400.393, 437.552, 0], + "to": [0.029, 0.04, 0], + "ti": [-0.025, -0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 49, + "s": [400.471, 437.661, 0], + "to": [0.025, 0.04, 0], + "ti": [-0.022, -0.048, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 50, + "s": [400.541, 437.792, 0], + "to": [0.022, 0.048, 0], + "ti": [-0.019, -0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 51, + "s": [400.602, 437.946, 0], + "to": [0.019, 0.055, 0], + "ti": [-0.015, -0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 52, + "s": [400.653, 438.122, 0], + "to": [0.015, 0.062, 0], + "ti": [-0.012, -0.069, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 53, + "s": [400.694, 438.32, 0], + "to": [0.012, 0.069, 0], + "ti": [-0.008, -0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 54, + "s": [400.724, 438.538, 0], + "to": [0.008, 0.076, 0], + "ti": [-0.004, -0.082, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 55, + "s": [400.743, 438.775, 0], + "to": [0.004, 0.082, 0], + "ti": [0.001, -0.09, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.157 }, + "t": 56, + "s": [400.751, 439.03, 0], + "to": [-0.001, 0.09, 0], + "ti": [0.01, -0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 57, + "s": [400.737, 439.316, 0], + "to": [-0.01, 0.102, 0], + "ti": [0.019, -0.113, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 58, + "s": [400.693, 439.644, 0], + "to": [-0.019, 0.113, 0], + "ti": [0.011, -0.059, 0] + }, + { "t": 59, "s": [400.624, 439.996, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-5.266, 0.476, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 8, + "s": [101.238, 48.218, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.994, 0.881, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.084, 0.099, 0] }, + "t": 9, + "s": [100.863, 56.49, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.87, 1.004, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.006, 0.279, 0] }, + "t": 10, + "s": [73.006, 100.241, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.716, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.233, 0.004, 0] }, + "t": 11, + "s": [98.954, 118.86, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.692, 0.993, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.185, 0.118, 0] }, + "t": 12, + "s": [113.422, 99.365, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.95, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.114, -0.008, 0] }, + "t": 13, + "s": [108.921, 52.336, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.185, 0.915, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.07, -0.128, 0] }, + "t": 14, + "s": [96.758, 95.263, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.076, 1.566, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.057, 3.934, 0] }, + "t": 15, + "s": [103.361, 78.328, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 0.67, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 0.073, 0] }, + "t": 16, + "s": [82.062, 77.962, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.435, 0.477, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.254, 0.111, 0] }, + "t": 17, + "s": [122.901, 80.818, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.986, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.098, 0.099, 0] }, + "t": 18, + "s": [112.827, 89.288, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.908, 0.891, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.016, 0.009, 0] }, + "t": 19, + "s": [54.614, 133.963, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 1.123, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.871, 0.351, 0] }, + "t": 20, + "s": [103.222, 83.744, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.079, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.032, 0.05, 0] }, + "t": 21, + "s": [108.364, 68.125, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.812, -0.393, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 2.172, 0] }, + "t": 22, + "s": [104.662, 106.75, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.481, 1.162, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.15, 0.089, 0] }, + "t": 23, + "s": [111.862, 108.291, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.008, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.055, 0] }, + "t": 24, + "s": [120.907, 132.514, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.892, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, -0.052, 0] }, + "t": 25, + "s": [59.613, 61.164, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.83, 1.094, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.141, 0.365, 0] }, + "t": 26, + "s": [126.782, 105.209, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 1.033, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.163, 0.044, 0] }, + "t": 27, + "s": [101.882, 118.255, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.119, 1.091, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.059, 0.024, 0] }, + "t": 28, + "s": [75.979, 90.498, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.983, 0.951, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.049, 0.043, 0] }, + "t": 29, + "s": [91.099, 129.32, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.873, 0.878, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.022, -0.118, 0] }, + "t": 30, + "s": [54.42, 48.147, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.036, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.244, 0.263, 0] }, + "t": 31, + "s": [83.4, 81.807, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 2.819, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, 1.369, 0] }, + "t": 32, + "s": [98.473, 97.441, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-4.522, 1.004, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [3.172, 0.08, 0] }, + "t": 33, + "s": [76.975, 98.454, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 1.005, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.085, 0.004, 0] }, + "t": 34, + "s": [76.395, 75.312, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.837, 0.918, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.032, 0.005, 0] }, + "t": 35, + "s": [38.536, 99.649, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.978, 2.101, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.171, -4.786, 0] }, + "t": 36, + "s": [65.888, 73.73, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.051, 1.151, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.03, 0.077, 0] }, + "t": 37, + "s": [91.971, 74.174, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.063, 1.136, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.032, 0.054, 0] }, + "t": 38, + "s": [72.715, 67.868, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.933, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.036, 0.052, 0] }, + "t": 39, + "s": [103.785, 85.634, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.65, 1.416, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.353, 1.245, 0] }, + "t": 40, + "s": [49.165, 38.912, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 0.946, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.109, 0.069, 0] }, + "t": 41, + "s": [59.594, 35.561, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.678, 0.628, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.154, -0.156, 0] }, + "t": 42, + "s": [92.977, 55.629, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.983, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.112, 0.107, 0] }, + "t": 43, + "s": [81.252, 48.654, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.985, 0.899, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, -0.021, 0] }, + "t": 44, + "s": [47.617, 24.458, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 1.627, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.018, 0.474, 0] }, + "t": 45, + "s": [16.653, 43.696, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.225, 0.074, 0] }, + "t": 46, + "s": [42.187, 47.804, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.962, 0.963, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.07, -0.023, 0] }, + "t": 47, + "s": [35.289, 12.804, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.877, 0.815, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.077, -0.066, 0] }, + "t": 48, + "s": [39.035, 40.12, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.027, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.257, 0.151, 0] }, + "t": 49, + "s": [-7.944, 24.911, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.741, 1.341, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.223, 0] }, + "t": 50, + "s": [-30.445, 6.276, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.123, 0.067, 0] }, + "t": 51, + "s": [-0.773, -4.844, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.692, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.147, 0.394, 0] }, + "t": 52, + "s": [61.907, 51.792, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 0.468, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.114, -0.024, 0] }, + "t": 53, + "s": [39.231, 67.006, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.829, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.035, 0.099, 0] }, + "t": 54, + "s": [-21.899, 55.157, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.981, 0.881, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.163, -0.053, 0] }, + "t": 55, + "s": [21.199, -8.63, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.959, 1.022, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.025, 0.276, 0] }, + "t": 56, + "s": [66.363, 30.41, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.882, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.08, 0.018, 0] }, + "t": 57, + "s": [31.738, 47.268, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.182, 0.283, 0] }, + "t": 58, + "s": [49.437, 25.928, 100] + }, + { "t": 59, "s": [43.876, 17.029, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 60, + "st": 8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 32, + "ty": 4, + "nm": "Shape Layer 20", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 6, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 33, + "s": [100] + }, + { "t": 49, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.574 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 6, + "s": [273.987, 258.212, 0], + "to": [-0.226, 0.261, 0], + "ti": [1.235, -1.262, 0] + }, + { + "i": { "x": 0.833, "y": 0.763 }, + "o": { "x": 0.167, "y": 0.104 }, + "t": 7, + "s": [272.634, 259.781, 0], + "to": [-1.235, 1.262, 0], + "ti": [3.172, -2.472, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 8, + "s": [266.579, 265.787, 0], + "to": [-3.172, 2.472, 0], + "ti": [4.928, -2.338, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 9, + "s": [253.605, 274.613, 0], + "to": [-4.928, 2.338, 0], + "ti": [5.281, -0.789, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 10, + "s": [237.011, 279.814, 0], + "to": [-5.281, 0.789, 0], + "ti": [4.495, 0.772, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 11, + "s": [221.916, 279.349, 0], + "to": [-4.495, -0.772, 0], + "ti": [3.459, 1.674, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 12, + "s": [210.041, 275.183, 0], + "to": [-3.459, -1.674, 0], + "ti": [2.573, 2.049, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 13, + "s": [201.165, 269.307, 0], + "to": [-2.573, -2.049, 0], + "ti": [1.908, 2.132, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 14, + "s": [194.6, 262.891, 0], + "to": [-1.908, -2.132, 0], + "ti": [1.43, 2.079, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 15, + "s": [189.714, 256.512, 0], + "to": [-1.43, -2.079, 0], + "ti": [1.088, 1.968, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [186.021, 250.417, 0], + "to": [-1.088, -1.968, 0], + "ti": [0.842, 1.835, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [183.185, 244.707, 0], + "to": [-0.842, -1.835, 0], + "ti": [0.663, 1.699, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [180.968, 239.407, 0], + "to": [-0.663, -1.699, 0], + "ti": [0.532, 1.568, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [179.205, 234.511, 0], + "to": [-0.532, -1.568, 0], + "ti": [0.434, 1.443, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [177.777, 230, 0], + "to": [-0.434, -1.443, 0], + "ti": [0.361, 1.326, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [176.6, 225.853, 0], + "to": [-0.361, -1.326, 0], + "ti": [0.305, 1.218, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [175.612, 222.043, 0], + "to": [-0.305, -1.218, 0], + "ti": [0.263, 1.116, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [174.767, 218.548, 0], + "to": [-0.263, -1.116, 0], + "ti": [0.231, 1.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [174.033, 215.345, 0], + "to": [-0.231, -1.022, 0], + "ti": [0.205, 0.934, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 25, + "s": [173.383, 212.416, 0], + "to": [-0.205, -0.934, 0], + "ti": [0.185, 0.851, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [172.801, 209.743, 0], + "to": [-0.185, -0.851, 0], + "ti": [0.169, 0.773, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [172.273, 207.311, 0], + "to": [-0.169, -0.773, 0], + "ti": [0.155, 0.7, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 28, + "s": [171.79, 205.104, 0], + "to": [-0.155, -0.7, 0], + "ti": [0.143, 0.63, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [171.345, 203.111, 0], + "to": [-0.143, -0.63, 0], + "ti": [0.131, 0.565, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 30, + "s": [170.934, 201.322, 0], + "to": [-0.131, -0.565, 0], + "ti": [0.12, 0.503, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 31, + "s": [170.557, 199.723, 0], + "to": [-0.12, -0.503, 0], + "ti": [0.109, 0.444, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 32, + "s": [170.213, 198.306, 0], + "to": [-0.109, -0.444, 0], + "ti": [0.097, 0.389, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 33, + "s": [169.903, 197.059, 0], + "to": [-0.097, -0.389, 0], + "ti": [0.085, 0.336, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 34, + "s": [169.629, 195.974, 0], + "to": [-0.085, -0.336, 0], + "ti": [0.07, 0.287, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 35, + "s": [169.396, 195.042, 0], + "to": [-0.07, -0.287, 0], + "ti": [0.055, 0.24, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 36, + "s": [169.206, 194.254, 0], + "to": [-0.055, -0.24, 0], + "ti": [0.037, 0.195, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 37, + "s": [169.067, 193.604, 0], + "to": [-0.037, -0.195, 0], + "ti": [0.018, 0.153, 0] + }, + { + "i": { "x": 0.833, "y": 0.856 }, + "o": { "x": 0.167, "y": 0.193 }, + "t": 38, + "s": [168.983, 193.083, 0], + "to": [-0.018, -0.153, 0], + "ti": [-0.004, 0.114, 0] + }, + { + "i": { "x": 0.833, "y": 0.855 }, + "o": { "x": 0.167, "y": 0.199 }, + "t": 39, + "s": [168.961, 192.685, 0], + "to": [0.004, -0.114, 0], + "ti": [-0.028, 0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.195 }, + "t": 40, + "s": [169.007, 192.402, 0], + "to": [0.028, -0.076, 0], + "ti": [-0.046, 0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 41, + "s": [169.128, 192.228, 0], + "to": [0.046, -0.036, 0], + "ti": [-0.055, -0.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.805 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 42, + "s": [169.284, 192.183, 0], + "to": [0.055, 0.006, 0], + "ti": [-0.06, -0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.812 }, + "o": { "x": 0.167, "y": 0.145 }, + "t": 43, + "s": [169.457, 192.261, 0], + "to": [0.06, 0.042, 0], + "ti": [-0.063, -0.073, 0] + }, + { + "i": { "x": 0.833, "y": 0.819 }, + "o": { "x": 0.167, "y": 0.15 }, + "t": 44, + "s": [169.642, 192.438, 0], + "to": [0.063, 0.073, 0], + "ti": [-0.065, -0.097, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.154 }, + "t": 45, + "s": [169.834, 192.698, 0], + "to": [0.065, 0.097, 0], + "ti": [-0.066, -0.11, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 46, + "s": [170.032, 193.022, 0], + "to": [0.066, 0.11, 0], + "ti": [-0.066, -0.107, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 47, + "s": [170.231, 193.359, 0], + "to": [0.066, 0.107, 0], + "ti": [-0.066, -0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 48, + "s": [170.43, 193.661, 0], + "to": [0.066, 0.094, 0], + "ti": [-0.064, -0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 49, + "s": [170.626, 193.92, 0], + "to": [0.064, 0.077, 0], + "ti": [-0.062, -0.058, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 50, + "s": [170.816, 194.125, 0], + "to": [0.062, 0.058, 0], + "ti": [-0.059, -0.037, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 51, + "s": [170.999, 194.269, 0], + "to": [0.059, 0.037, 0], + "ti": [-0.056, -0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 52, + "s": [171.172, 194.347, 0], + "to": [0.056, 0.014, 0], + "ti": [-0.052, 0.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.816 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 53, + "s": [171.335, 194.353, 0], + "to": [0.052, -0.01, 0], + "ti": [-0.048, 0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.811 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 54, + "s": [171.485, 194.284, 0], + "to": [0.048, -0.036, 0], + "ti": [-0.043, 0.061, 0] + }, + { + "i": { "x": 0.833, "y": 0.812 }, + "o": { "x": 0.167, "y": 0.149 }, + "t": 55, + "s": [171.621, 194.138, 0], + "to": [0.043, -0.061, 0], + "ti": [-0.038, 0.087, 0] + }, + { + "i": { "x": 0.833, "y": 0.816 }, + "o": { "x": 0.167, "y": 0.15 }, + "t": 56, + "s": [171.743, 193.915, 0], + "to": [0.038, -0.087, 0], + "ti": [-0.033, 0.112, 0] + }, + { + "i": { "x": 0.833, "y": 0.819 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 57, + "s": [171.851, 193.615, 0], + "to": [0.033, -0.112, 0], + "ti": [-0.028, 0.137, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.154 }, + "t": 58, + "s": [171.943, 193.241, 0], + "to": [0.028, -0.137, 0], + "ti": [-0.013, 0.074, 0] + }, + { "t": 59, "s": [172.02, 192.796, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.05, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 6, + "s": [113.755, 94.294, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.873, 0.226, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.031, -0.701, 0] }, + "t": 7, + "s": [142.324, 42.5, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.888, 0.932, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.241, 0.093, 0] }, + "t": 8, + "s": [96.482, 48.003, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.204, 0.806, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.325, -0.366, 0] }, + "t": 9, + "s": [72.3, 93.591, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.921, 0.58, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.059, 0.146, 0] }, + "t": 10, + "s": [63.951, 85.144, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.459, 0.97, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.529, 0.104, 0] }, + "t": 11, + "s": [92.765, 73.936, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.995, 0.876, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.088, -0.048, 0] }, + "t": 12, + "s": [91.276, 28.604, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.992, 1.032, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.006, 0.254, 0] }, + "t": 13, + "s": [66.684, 57.392, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.995, 1.013, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.008, 0.023, 0] }, + "t": 14, + "s": [89.679, 71.451, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.731, 0.864, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.005, 0.012, 0] }, + "t": 15, + "s": [68.777, 51.94, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.035, 0.702, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.121, 0.214, 0] }, + "t": 16, + "s": [88.421, 74.596, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.935, 0.98, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, 0.116, 0] }, + "t": 17, + "s": [132.23, 89.048, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.575, 0.845, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.305, -0.027, 0] }, + "t": 18, + "s": [69.974, 126.315, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.931, 0.98, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.104, 0.18, 0] }, + "t": 19, + "s": [83.338, 98.135, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.313, 0.783, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.391, -0.026, 0] }, + "t": 20, + "s": [138.117, 73.778, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.993, 0.847, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.095, 0.135, 0] }, + "t": 21, + "s": [128.488, 92.265, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.953, 1.145, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.008, 0.183, 0] }, + "t": 22, + "s": [58.681, 121.955, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.815, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.109, 0.053, 0] }, + "t": 23, + "s": [122.512, 146.761, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 5.116, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.152, 17.285, 0] }, + "t": 24, + "s": [94.854, 78.682, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.02, 1.177, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, 0.082, 0] }, + "t": 25, + "s": [61.077, 78.352, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 1.017, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, 0.057, 0] }, + "t": 26, + "s": [91.084, 94.97, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.068, 0.014, 0] }, + "t": 27, + "s": [53.825, 43.095, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.888, 0.893, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.186, -0.051, 0] }, + "t": 28, + "s": [74.356, 105.62, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.814, 1.146, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.324, 0.371, 0] }, + "t": 29, + "s": [91.09, 66.721, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.498, 0.904, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.151, 0.053, 0] }, + "t": 30, + "s": [96.876, 55.445, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.992, 1.823, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.645, 0] }, + "t": 31, + "s": [104.026, 86.476, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.986, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.009, 0.076, 0] }, + "t": 32, + "s": [54.137, 91.081, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.906, 0.944, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.017, -0.393, 0] }, + "t": 33, + "s": [99.353, 40.985, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.666, 0.653, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.764, -0.167, 0] }, + "t": 34, + "s": [61.794, 49.744, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.993, 0.855, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, 0.11, 0] }, + "t": 35, + "s": [57.194, 46.834, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.011, 1.186, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.008, 0.195, 0] }, + "t": 36, + "s": [98.549, 37.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.007, 1.031, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.009, 0.058, 0] }, + "t": 37, + "s": [60.683, 30.783, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.882, 0.935, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, 0.023, 0] }, + "t": 38, + "s": [103.351, 52.891, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.098, 0.657, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.282, -0.288, 0] }, + "t": 39, + "s": [56.948, 22.459, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.953, 0.83, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, 0.11, 0] }, + "t": 40, + "s": [37.48, 29.284, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.913, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.106, 0.164, 0] }, + "t": 41, + "s": [79.938, 50.562, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-5.816, 1.008, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.804, -0.017, 0] }, + "t": 42, + "s": [61.287, 72.597, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 1.042, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.084, 0.008, 0] }, + "t": 43, + "s": [60.383, 54.282, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.87, 0.901, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.155, 0.028, 0] }, + "t": 44, + "s": [-12.609, 74.447, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.795, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.231, 0.53, 0] }, + "t": 45, + "s": [12.933, 44.106, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.094, 1.748, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, -0.037, 0] }, + "t": 46, + "s": [27.371, 38.441, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 0.881, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, 0.075, 0] }, + "t": 47, + "s": [48.387, 42.359, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.231, 0.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.898, 0.279, 0] }, + "t": 48, + "s": [3.703, 3.258, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.188, -0.77, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, -0.58, 0] }, + "t": 49, + "s": [7.498, -13.404, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.899, 0.864, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, 0.087, 0] }, + "t": 50, + "s": [-6.825, -11.313, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.382, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.485, 0.214, 0] }, + "t": 51, + "s": [39.727, 31.017, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 1.572, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.068, 0.386, 0] }, + "t": 52, + "s": [49.384, 58.012, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.795, 0.914, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.055, 0.073, 0] }, + "t": 53, + "s": [-4.528, 65.442, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 1.691, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, 3.173, 0] }, + "t": 54, + "s": [27.852, 6.982, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.907, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.001, 0.074, 0] }, + "t": 55, + "s": [75.027, 5.405, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.463, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.146, 0.773, 0] }, + "t": 56, + "s": [28.477, 20.053, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.164, 1.39, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.224, 0.099, 0] }, + "t": 57, + "s": [45.412, 21.822, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.069, 0] }, + "t": 58, + "s": [55.436, 31.442, 100] + }, + { "t": 59, "s": [25.653, -23.168, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 6, + "op": 60, + "st": 6, + "bm": 0 + }, + { + "ddd": 0, + "ind": 33, + "ty": 4, + "nm": "Shape Layer 19", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 16, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 38, + "s": [100] + }, + { "t": 54, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.51 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 11, + "s": [273.717, 253.598, 0], + "to": [0.28, -0.028, 0], + "ti": [-1.664, -0.082, 0] + }, + { + "i": { "x": 0.833, "y": 0.759 }, + "o": { "x": 0.167, "y": 0.1 }, + "t": 12, + "s": [275.395, 253.428, 0], + "to": [1.664, 0.082, 0], + "ti": [-3.922, -0.767, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.127 }, + "t": 13, + "s": [283.7, 254.091, 0], + "to": [3.922, 0.767, 0], + "ti": [-5.158, -1.975, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 14, + "s": [298.929, 258.033, 0], + "to": [5.158, 1.975, 0], + "ti": [-4.6, -2.946, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 15, + "s": [314.649, 265.939, 0], + "to": [4.6, 2.946, 0], + "ti": [-3.328, -3.296, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 16, + "s": [326.529, 275.709, 0], + "to": [3.328, 3.296, 0], + "ti": [-2.233, -3.252, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 17, + "s": [334.618, 285.714, 0], + "to": [2.233, 3.252, 0], + "ti": [-1.455, -3.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 18, + "s": [339.929, 295.223, 0], + "to": [1.455, 3.046, 0], + "ti": [-0.931, -2.79, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 19, + "s": [343.35, 303.988, 0], + "to": [0.931, 2.79, 0], + "ti": [-0.582, -2.533, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 20, + "s": [345.513, 311.964, 0], + "to": [0.582, 2.533, 0], + "ti": [-0.353, -2.293, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [346.843, 319.188, 0], + "to": [0.353, 2.293, 0], + "ti": [-0.205, -2.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [347.63, 325.723, 0], + "to": [0.205, 2.077, 0], + "ti": [-0.115, -1.887, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [348.075, 331.651, 0], + "to": [0.115, 1.887, 0], + "ti": [-0.064, -1.719, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [348.319, 337.046, 0], + "to": [0.064, 1.719, 0], + "ti": [-0.041, -1.573, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [348.461, 341.968, 0], + "to": [0.041, 1.573, 0], + "ti": [-0.028, -1.452, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 26, + "s": [348.564, 346.482, 0], + "to": [0.028, 1.452, 0], + "ti": [-0.019, -1.351, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 27, + "s": [348.628, 350.68, 0], + "to": [0.019, 1.351, 0], + "ti": [-0.016, -1.256, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 28, + "s": [348.676, 354.586, 0], + "to": [0.016, 1.256, 0], + "ti": [-0.018, -1.167, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 29, + "s": [348.724, 358.218, 0], + "to": [0.018, 1.167, 0], + "ti": [-0.022, -1.082, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 30, + "s": [348.783, 361.589, 0], + "to": [0.022, 1.082, 0], + "ti": [-0.029, -1, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 31, + "s": [348.858, 364.71, 0], + "to": [0.029, 1, 0], + "ti": [-0.036, -0.921, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 32, + "s": [348.955, 367.59, 0], + "to": [0.036, 0.921, 0], + "ti": [-0.043, -0.844, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [349.073, 370.236, 0], + "to": [0.043, 0.844, 0], + "ti": [-0.05, -0.768, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 34, + "s": [349.212, 372.652, 0], + "to": [0.05, 0.768, 0], + "ti": [-0.056, -0.694, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 35, + "s": [349.372, 374.845, 0], + "to": [0.056, 0.694, 0], + "ti": [-0.062, -0.622, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 36, + "s": [349.55, 376.819, 0], + "to": [0.062, 0.622, 0], + "ti": [-0.067, -0.551, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 37, + "s": [349.743, 378.577, 0], + "to": [0.067, 0.551, 0], + "ti": [-0.07, -0.481, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 38, + "s": [349.95, 380.124, 0], + "to": [0.07, 0.481, 0], + "ti": [-0.073, -0.413, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 39, + "s": [350.166, 381.464, 0], + "to": [0.073, 0.413, 0], + "ti": [-0.075, -0.348, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 40, + "s": [350.389, 382.603, 0], + "to": [0.075, 0.348, 0], + "ti": [-0.075, -0.284, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 41, + "s": [350.614, 383.549, 0], + "to": [0.075, 0.284, 0], + "ti": [-0.075, -0.222, 0] + }, + { + "i": { "x": 0.833, "y": 0.855 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 42, + "s": [350.84, 384.306, 0], + "to": [0.075, 0.222, 0], + "ti": [-0.073, -0.163, 0] + }, + { + "i": { "x": 0.833, "y": 0.859 }, + "o": { "x": 0.167, "y": 0.196 }, + "t": 43, + "s": [351.062, 384.882, 0], + "to": [0.073, 0.163, 0], + "ti": [-0.071, -0.106, 0] + }, + { + "i": { "x": 0.833, "y": 0.86 }, + "o": { "x": 0.167, "y": 0.204 }, + "t": 44, + "s": [351.279, 385.285, 0], + "to": [0.071, 0.106, 0], + "ti": [-0.068, -0.053, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.205 }, + "t": 45, + "s": [351.487, 385.521, 0], + "to": [0.068, 0.053, 0], + "ti": [-0.064, -0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.806 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 46, + "s": [351.685, 385.601, 0], + "to": [0.064, 0.002, 0], + "ti": [-0.059, 0.045, 0] + }, + { + "i": { "x": 0.833, "y": 0.804 }, + "o": { "x": 0.167, "y": 0.146 }, + "t": 47, + "s": [351.87, 385.535, 0], + "to": [0.059, -0.045, 0], + "ti": [-0.054, 0.088, 0] + }, + { + "i": { "x": 0.833, "y": 0.811 }, + "o": { "x": 0.167, "y": 0.145 }, + "t": 48, + "s": [352.04, 385.333, 0], + "to": [0.054, -0.088, 0], + "ti": [-0.049, 0.127, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.149 }, + "t": 49, + "s": [352.195, 385.007, 0], + "to": [0.049, -0.127, 0], + "ti": [-0.043, 0.161, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 50, + "s": [352.331, 384.571, 0], + "to": [0.043, -0.161, 0], + "ti": [-0.035, 0.185, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 51, + "s": [352.45, 384.039, 0], + "to": [0.035, -0.185, 0], + "ti": [-0.024, 0.192, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 52, + "s": [352.541, 383.461, 0], + "to": [0.024, -0.192, 0], + "ti": [-0.013, 0.188, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 53, + "s": [352.596, 382.887, 0], + "to": [0.013, -0.188, 0], + "ti": [-0.001, 0.179, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 54, + "s": [352.617, 382.333, 0], + "to": [0.001, -0.179, 0], + "ti": [0.007, 0.165, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 55, + "s": [352.603, 381.814, 0], + "to": [-0.007, -0.165, 0], + "ti": [0.003, 0.149, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 56, + "s": [352.574, 381.345, 0], + "to": [-0.003, -0.149, 0], + "ti": [-0.011, 0.133, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 57, + "s": [352.587, 380.922, 0], + "to": [0.011, -0.133, 0], + "ti": [-0.023, 0.117, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 58, + "s": [352.639, 380.546, 0], + "to": [0.023, -0.117, 0], + "ti": [-0.014, 0.055, 0] + }, + { "t": 59, "s": [352.724, 380.217, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.45, -1.622, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 11, + "s": [64.676, 29.575, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.851, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, 0.086, 0] }, + "t": 12, + "s": [63.619, 31.654, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.096, 0.849, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.189, -0.115, 0] }, + "t": 13, + "s": [83.082, 94.984, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.044, 1.052, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, 0.186, 0] }, + "t": 14, + "s": [98.428, 68.346, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.791, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.029, 0.032, 0] }, + "t": 15, + "s": [65.326, 46.692, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.846, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.117, 0.139, 0] }, + "t": 16, + "s": [115.976, 81.786, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.191, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.181, -0.001, 0] }, + "t": 17, + "s": [94.867, 134.538, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 1.096, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, 0.505, 0] }, + "t": 18, + "s": [76.907, 82.463, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.592, 0.774, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.576, 0.045, 0] }, + "t": 19, + "s": [136.087, 72.163, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.95, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.132, 0] }, + "t": 20, + "s": [146.093, 94.38, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 1.06, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.126, 0.245, 0] }, + "t": 21, + "s": [64.998, 132.461, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.163, 0.877, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, 0.035, 0] }, + "t": 22, + "s": [97.241, 152.104, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.936, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.259, 0] }, + "t": 23, + "s": [126.81, 118.253, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.87, 0.449, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.273, 0.246, 0] }, + "t": 24, + "s": [39.419, 102.155, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.013, 0.912, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.231, 0.098, 0] }, + "t": 25, + "s": [59.845, 93.89, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.068, 2.263, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.011, 1.504, 0] }, + "t": 26, + "s": [71.34, 47.538, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.87, 0.951, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.037, 0.078, 0] }, + "t": 27, + "s": [58.098, 44.818, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.848, 0.781, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.234, -0.119, 0] }, + "t": 28, + "s": [82.135, 88.74, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.37, 1.069, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.185, 0.135, 0] }, + "t": 29, + "s": [95.452, 70.689, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 0.946, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.068, 0.038, 0] }, + "t": 30, + "s": [106.399, 41.339, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.931, 0.784, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, -0.156, 0] }, + "t": 31, + "s": [46.837, 95.066, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.989, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.417, 0.136, 0] }, + "t": 32, + "s": [100.241, 76.371, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.202, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.224, -0.013, 0] }, + "t": 33, + "s": [91.348, 46.624, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.96, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.059, -0.017, 0] }, + "t": 34, + "s": [86.082, 72.273, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.193, 0.684, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.069, -0.076, 0] }, + "t": 35, + "s": [104.113, 51.031, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.964, 0.99, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, 0.113, 0] }, + "t": 36, + "s": [94.281, 62.125, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.717, 0.85, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.063, -0.012, 0] }, + "t": 37, + "s": [126.942, 93.089, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.99, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.118, 0.187, 0] }, + "t": 38, + "s": [108.331, 65.944, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.969, 0.494, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.012, -0.318, 0] }, + "t": 39, + "s": [63.723, 44.138, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.903, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.049, 0.1, 0] }, + "t": 40, + "s": [102.921, 48.671, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.464, 0.113, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.147, 0.604, 0] }, + "t": 41, + "s": [78.268, 71.671, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.902, 1.068, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.092, 0] }, + "t": 42, + "s": [87.176, 75.352, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.234, 0.908, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.554, 0.037, 0] }, + "t": 43, + "s": [28.705, 110.854, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.845, 1.441, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, 0.901, 0] }, + "t": 44, + "s": [18.357, 46.477, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.091, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.181, 0.07, 0] }, + "t": 45, + "s": [57.758, 39.913, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.801, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, -0.023, 0] }, + "t": 46, + "s": [91.489, 81.222, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.953, 0.932, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.137, 0.143, 0] }, + "t": 47, + "s": [20.878, 48.853, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.976, 0.994, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.108, -0.379, 0] }, + "t": 48, + "s": [47.568, 3.824, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.831, 1.042, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.035, -0.006, 0] }, + "t": 49, + "s": [35.966, 11.947, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.412, 0.592, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.165, 0.028, 0] }, + "t": 50, + "s": [44.168, 4.41, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 0.978, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 0.105, 0] }, + "t": 51, + "s": [52.575, 15.778, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.454, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.254, -0.03, 0] }, + "t": 52, + "s": [2.557, 60.137, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.959, 1.407, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.098, -0.624, 0] }, + "t": 53, + "s": [14.899, 27.604, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 1.066, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.082, 0.069, 0] }, + "t": 54, + "s": [83.445, 31.436, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.046, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.186, 0.037, 0] }, + "t": 55, + "s": [48.803, 8.908, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 0.694, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.03, -0.323, 0] }, + "t": 56, + "s": [20.805, 49.183, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.959, 0.832, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.065, 0.115, 0] }, + "t": 57, + "s": [64.315, 40.919, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.079, 0.165, 0] }, + "t": 58, + "s": [39.92, 18.864, 100] + }, + { "t": 59, "s": [52.411, -3.555, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167325382607, 0.716982433843, 1, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 11, + "op": 60, + "st": 11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 34, + "ty": 4, + "nm": "Shape Layer 18", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 17, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 39, + "s": [100] + }, + { "t": 55, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.544 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 12, + "s": [267.865, 255.269, 0], + "to": [-0.161, -0.402, 0], + "ti": [1.026, 2.138, 0] + }, + { + "i": { "x": 0.833, "y": 0.761 }, + "o": { "x": 0.167, "y": 0.102 }, + "t": 13, + "s": [266.901, 252.858, 0], + "to": [-1.026, -2.138, 0], + "ti": [2.899, 4.739, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.128 }, + "t": 14, + "s": [261.706, 242.443, 0], + "to": [-2.899, -4.739, 0], + "ti": [4.94, 5.799, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 15, + "s": [249.506, 224.427, 0], + "to": [-4.94, -5.799, 0], + "ti": [5.963, 4.5, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 16, + "s": [232.069, 207.647, 0], + "to": [-5.963, -4.5, 0], + "ti": [5.888, 2.374, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 17, + "s": [213.727, 197.425, 0], + "to": [-5.888, -2.374, 0], + "ti": [5.276, 0.563, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 18, + "s": [196.743, 193.401, 0], + "to": [-5.276, -0.563, 0], + "ti": [4.452, -0.741, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 19, + "s": [182.074, 194.046, 0], + "to": [-4.452, 0.741, 0], + "ti": [3.589, -1.577, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 20, + "s": [170.029, 197.845, 0], + "to": [-3.589, 1.577, 0], + "ti": [2.794, -2.037, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 21, + "s": [160.537, 203.508, 0], + "to": [-2.794, 2.037, 0], + "ti": [2.125, -2.229, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 22, + "s": [153.265, 210.066, 0], + "to": [-2.125, 2.229, 0], + "ti": [1.595, -2.253, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 23, + "s": [147.784, 216.885, 0], + "to": [-1.595, 2.253, 0], + "ti": [1.188, -2.18, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 24, + "s": [143.692, 223.586, 0], + "to": [-1.188, 2.18, 0], + "ti": [0.88, -2.056, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 25, + "s": [140.657, 229.963, 0], + "to": [-0.88, 2.056, 0], + "ti": [0.65, -1.912, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 26, + "s": [138.413, 235.924, 0], + "to": [-0.65, 1.912, 0], + "ti": [0.477, -1.76, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 27, + "s": [136.76, 241.434, 0], + "to": [-0.477, 1.76, 0], + "ti": [0.347, -1.607, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 28, + "s": [135.553, 246.481, 0], + "to": [-0.347, 1.607, 0], + "ti": [0.25, -1.458, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [134.678, 251.075, 0], + "to": [-0.25, 1.458, 0], + "ti": [0.178, -1.316, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 30, + "s": [134.053, 255.23, 0], + "to": [-0.178, 1.316, 0], + "ti": [0.125, -1.182, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 31, + "s": [133.611, 258.969, 0], + "to": [-0.125, 1.182, 0], + "ti": [0.088, -1.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 32, + "s": [133.302, 262.321, 0], + "to": [-0.088, 1.057, 0], + "ti": [0.062, -0.942, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 33, + "s": [133.085, 265.313, 0], + "to": [-0.062, 0.942, 0], + "ti": [0.045, -0.835, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 34, + "s": [132.931, 267.971, 0], + "to": [-0.045, 0.835, 0], + "ti": [0.035, -0.737, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 35, + "s": [132.816, 270.322, 0], + "to": [-0.035, 0.737, 0], + "ti": [0.031, -0.648, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 36, + "s": [132.72, 272.392, 0], + "to": [-0.031, 0.648, 0], + "ti": [0.031, -0.567, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 37, + "s": [132.63, 274.209, 0], + "to": [-0.031, 0.567, 0], + "ti": [0.035, -0.496, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 38, + "s": [132.533, 275.797, 0], + "to": [-0.035, 0.496, 0], + "ti": [0.04, -0.432, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 39, + "s": [132.422, 277.182, 0], + "to": [-0.04, 0.432, 0], + "ti": [0.043, -0.377, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 40, + "s": [132.291, 278.392, 0], + "to": [-0.043, 0.377, 0], + "ti": [0.036, -0.328, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 41, + "s": [132.166, 279.447, 0], + "to": [-0.036, 0.328, 0], + "ti": [0.026, -0.282, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 42, + "s": [132.075, 280.359, 0], + "to": [-0.026, 0.282, 0], + "ti": [0.017, -0.24, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 43, + "s": [132.011, 281.139, 0], + "to": [-0.017, 0.24, 0], + "ti": [0.01, -0.201, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 44, + "s": [131.972, 281.799, 0], + "to": [-0.01, 0.201, 0], + "ti": [0.003, -0.166, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 45, + "s": [131.954, 282.347, 0], + "to": [-0.003, 0.166, 0], + "ti": [-0.002, -0.133, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.189 }, + "t": 46, + "s": [131.953, 282.792, 0], + "to": [0.002, 0.133, 0], + "ti": [-0.007, -0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.859 }, + "o": { "x": 0.167, "y": 0.195 }, + "t": 47, + "s": [131.967, 283.142, 0], + "to": [0.007, 0.102, 0], + "ti": [-0.011, -0.073, 0] + }, + { + "i": { "x": 0.833, "y": 0.866 }, + "o": { "x": 0.167, "y": 0.204 }, + "t": 48, + "s": [131.994, 283.403, 0], + "to": [0.011, 0.073, 0], + "ti": [-0.014, -0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.869 }, + "o": { "x": 0.167, "y": 0.222 }, + "t": 49, + "s": [132.031, 283.58, 0], + "to": [0.014, 0.046, 0], + "ti": [-0.017, -0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.811 }, + "o": { "x": 0.167, "y": 0.23 }, + "t": 50, + "s": [132.078, 283.677, 0], + "to": [0.017, 0.02, 0], + "ti": [-0.019, 0.004, 0] + }, + { + "i": { "x": 0.833, "y": 0.815 }, + "o": { "x": 0.167, "y": 0.149 }, + "t": 51, + "s": [132.132, 283.7, 0], + "to": [0.019, -0.004, 0], + "ti": [-0.021, 0.02, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 52, + "s": [132.193, 283.651, 0], + "to": [0.021, -0.02, 0], + "ti": [-0.023, 0.018, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 53, + "s": [132.259, 283.583, 0], + "to": [0.023, -0.018, 0], + "ti": [-0.025, 0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 54, + "s": [132.331, 283.544, 0], + "to": [0.025, -0.008, 0], + "ti": [-0.026, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 55, + "s": [132.408, 283.533, 0], + "to": [0.026, 0, 0], + "ti": [-0.027, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 56, + "s": [132.487, 283.545, 0], + "to": [0.027, 0.008, 0], + "ti": [-0.027, -0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 57, + "s": [132.568, 283.579, 0], + "to": [0.027, 0.014, 0], + "ti": [-0.027, -0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 58, + "s": [132.649, 283.63, 0], + "to": [0.027, 0.019, 0], + "ti": [-0.013, -0.011, 0] + }, + { "t": 59, "s": [132.728, 283.695, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.085, 2.343, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 12, + "s": [95.923, 97.698, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.959, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.042, 0.078, 0] }, + "t": 13, + "s": [119.853, 100.809, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.846, 0.754, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.082, -0.083, 0] }, + "t": 14, + "s": [71.61, 47.548, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.108, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.182, 0.126, 0] }, + "t": 15, + "s": [95.909, 74.187, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.971, 0.88, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.047, -0.015, 0] }, + "t": 16, + "s": [116.529, 126.213, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.765, 1.081, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.046, 0.272, 0] }, + "t": 17, + "s": [69.282, 82.296, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.014, 0.826, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.129, 0.041, 0] }, + "t": 18, + "s": [99.804, 62.944, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.925, 0.917, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.012, 0.16, 0] }, + "t": 19, + "s": [155.455, 101.204, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.797, -29.781, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.787, 622.842, 0] }, + "t": 20, + "s": [90.335, 142.892, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.16, 1.74, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, 0.084, 0] }, + "t": 21, + "s": [96.569, 142.898, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.834, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.075, 0] }, + "t": 22, + "s": [105.516, 144.953, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.994, 0.309, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.168, 0.547, 0] }, + "t": 23, + "s": [79.375, 124.659, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 0.77, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.007, 0.095, 0] }, + "t": 24, + "s": [53.599, 121.011, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.006, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.187, 0.131, 0] }, + "t": 25, + "s": [77.44, 94.418, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 0.812, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, -0.044, 0] }, + "t": 26, + "s": [96.658, 47.588, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.869, 1.081, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, 0.15, 0] }, + "t": 27, + "s": [75.964, 78.236, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.159, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.23, 0.041, 0] }, + "t": 28, + "s": [94.431, 116.596, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.918, 0.82, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, -0.058, 0] }, + "t": 29, + "s": [104.908, 41.132, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-2.162, 1.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-4.52, 0.155, 0] }, + "t": 30, + "s": [74.497, 85.65, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.955, 0.956, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.086, 0.011, 0] }, + "t": 31, + "s": [75.047, 137.348, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 1.056, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.097, -0.092, 0] }, + "t": 32, + "s": [95.389, 78.111, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.564, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.248, 0.034, 0] }, + "t": 33, + "s": [85.987, 106.338, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.138, 0.755, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, -0.133, 0] }, + "t": 34, + "s": [86.576, 59.064, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, 0.905, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.052, 0.126, 0] }, + "t": 35, + "s": [67.887, 77.283, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.048, 1.699, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.951, 0.69, 0] }, + "t": 36, + "s": [117.559, 112.652, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.968, 0.892, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, 0.074, 0] }, + "t": 37, + "s": [115.524, 117.508, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.028, 0.868, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.052, 0.361, 0] }, + "t": 38, + "s": [94.322, 71.923, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.911, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.021, 0.226, 0] }, + "t": 39, + "s": [107.41, 58.262, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-1.313, 0.689, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.225, -0.022, 0] }, + "t": 40, + "s": [89.918, 50.26, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, 0.965, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.086, 0.114, 0] }, + "t": 41, + "s": [88.641, 56.58, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.028, 0.486, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.303, -0.061, 0] }, + "t": 42, + "s": [54.485, 73.842, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.806, 1.029, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.021, 0.099, 0] }, + "t": 43, + "s": [41.537, 63.86, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.052, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.146, 0.021, 0] }, + "t": 44, + "s": [58.89, 12.33, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 1.279, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.032, 0.455, 0] }, + "t": 45, + "s": [81.867, 81.726, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.858, 0.905, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.543, 0.064, 0] }, + "t": 46, + "s": [44.5, 97.298, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.018, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.202, 0.656, 0] }, + "t": 47, + "s": [49.475, 29.648, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.415, -65.882, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.015, 34.7, 0] }, + "t": 48, + "s": [52.978, 19.812, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.126, 1.189, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 0.083, 0] }, + "t": 49, + "s": [48.737, 19.789, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 0.939, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.05, 0.058, 0] }, + "t": 50, + "s": [74.095, 0.809, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.788, 1.031, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.229, -0.233, 0] }, + "t": 51, + "s": [10.268, 62.842, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.913, 1.141, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.137, 0.023, 0] }, + "t": 52, + "s": [27.318, 46.475, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.588, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.212, 0.052, 0] }, + "t": 53, + "s": [53.611, 68.98, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.93, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, -0.069, 0] }, + "t": 54, + "s": [54.64, 8.452, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.974, 0.937, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.428, -0.05, 0] }, + "t": 55, + "s": [21.647, 41.626, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.031, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.037, -0.251, 0] }, + "t": 56, + "s": [27.025, 20.873, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.011, 0.234, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.023, 0.727, 0] }, + "t": 57, + "s": [23.296, 26.051, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.01, 0.093, 0] }, + "t": 58, + "s": [28.415, 26.722, 100] + }, + { "t": 59, "s": [22.608, 32.219, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167325382607, 0.716982433843, 1, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 12, + "op": 60, + "st": 12, + "bm": 0 + }, + { + "ddd": 0, + "ind": 35, + "ty": 4, + "nm": "Shape Layer 17", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 8, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 35, + "s": [100] + }, + { "t": 51, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.628 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [275.449, 259.557, 0], + "to": [0.546, 0.159, 0], + "ti": [-2.494, -0.483, 0] + }, + { + "i": { "x": 0.833, "y": 0.767 }, + "o": { "x": 0.167, "y": 0.107 }, + "t": 9, + "s": [278.724, 260.512, 0], + "to": [2.494, 0.483, 0], + "ti": [-5.49, -0.572, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.13 }, + "t": 10, + "s": [290.414, 262.453, 0], + "to": [5.49, 0.572, 0], + "ti": [-7.452, 0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 11, + "s": [311.663, 263.943, 0], + "to": [7.452, -0.063, 0], + "ti": [-7.172, 1.285, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 12, + "s": [335.126, 262.075, 0], + "to": [7.172, -1.285, 0], + "ti": [-5.684, 2.429, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 13, + "s": [354.697, 256.231, 0], + "to": [5.684, -2.429, 0], + "ti": [-4.084, 3.144, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 14, + "s": [369.23, 247.5, 0], + "to": [4.084, -3.144, 0], + "ti": [-2.734, 3.404, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 15, + "s": [379.199, 237.368, 0], + "to": [2.734, -3.404, 0], + "ti": [-1.736, 3.345, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 16, + "s": [385.634, 227.077, 0], + "to": [1.736, -3.345, 0], + "ti": [-1.056, 3.132, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 17, + "s": [389.616, 217.298, 0], + "to": [1.056, -3.132, 0], + "ti": [-0.604, 2.868, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 18, + "s": [391.967, 208.287, 0], + "to": [0.604, -2.868, 0], + "ti": [-0.305, 2.608, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [393.24, 200.09, 0], + "to": [0.305, -2.608, 0], + "ti": [-0.105, 2.371, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [393.797, 192.641, 0], + "to": [0.105, -2.371, 0], + "ti": [0.031, 2.158, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [393.871, 185.865, 0], + "to": [-0.031, -2.158, 0], + "ti": [0.123, 1.968, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [393.614, 179.691, 0], + "to": [-0.123, -1.968, 0], + "ti": [0.186, 1.797, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [393.131, 174.057, 0], + "to": [-0.186, -1.797, 0], + "ti": [0.228, 1.644, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [392.497, 168.908, 0], + "to": [-0.228, -1.644, 0], + "ti": [0.251, 1.504, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [391.765, 164.196, 0], + "to": [-0.251, -1.504, 0], + "ti": [0.261, 1.377, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [390.988, 159.882, 0], + "to": [-0.261, -1.377, 0], + "ti": [0.262, 1.261, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 27, + "s": [390.199, 155.932, 0], + "to": [-0.262, -1.261, 0], + "ti": [0.256, 1.155, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [389.418, 152.313, 0], + "to": [-0.256, -1.155, 0], + "ti": [0.246, 1.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 29, + "s": [388.662, 149, 0], + "to": [-0.246, -1.057, 0], + "ti": [0.233, 0.967, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 30, + "s": [387.941, 145.969, 0], + "to": [-0.233, -0.967, 0], + "ti": [0.217, 0.882, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 31, + "s": [387.264, 143.201, 0], + "to": [-0.217, -0.882, 0], + "ti": [0.199, 0.803, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 32, + "s": [386.64, 140.677, 0], + "to": [-0.199, -0.803, 0], + "ti": [0.18, 0.729, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 33, + "s": [386.071, 138.382, 0], + "to": [-0.18, -0.729, 0], + "ti": [0.159, 0.659, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 34, + "s": [385.563, 136.303, 0], + "to": [-0.159, -0.659, 0], + "ti": [0.138, 0.594, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 35, + "s": [385.116, 134.426, 0], + "to": [-0.138, -0.594, 0], + "ti": [0.117, 0.531, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 36, + "s": [384.732, 132.741, 0], + "to": [-0.117, -0.531, 0], + "ti": [0.096, 0.473, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 37, + "s": [384.411, 131.237, 0], + "to": [-0.096, -0.473, 0], + "ti": [0.076, 0.417, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 38, + "s": [384.153, 129.905, 0], + "to": [-0.076, -0.417, 0], + "ti": [0.055, 0.364, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 39, + "s": [383.957, 128.736, 0], + "to": [-0.055, -0.364, 0], + "ti": [0.036, 0.314, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 40, + "s": [383.821, 127.721, 0], + "to": [-0.036, -0.314, 0], + "ti": [0.017, 0.266, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 41, + "s": [383.742, 126.852, 0], + "to": [-0.017, -0.266, 0], + "ti": [0, 0.222, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 42, + "s": [383.718, 126.122, 0], + "to": [0, -0.222, 0], + "ti": [-0.017, 0.179, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 43, + "s": [383.745, 125.523, 0], + "to": [0.017, -0.179, 0], + "ti": [-0.032, 0.139, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 44, + "s": [383.819, 125.048, 0], + "to": [0.032, -0.139, 0], + "ti": [-0.046, 0.101, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 45, + "s": [383.937, 124.69, 0], + "to": [0.046, -0.101, 0], + "ti": [-0.058, 0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 46, + "s": [384.093, 124.442, 0], + "to": [0.058, -0.066, 0], + "ti": [-0.068, 0.032, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 47, + "s": [384.283, 124.297, 0], + "to": [0.068, -0.032, 0], + "ti": [-0.074, 0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 48, + "s": [384.5, 124.247, 0], + "to": [0.074, -0.009, 0], + "ti": [-0.073, 0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 49, + "s": [384.725, 124.244, 0], + "to": [0.073, -0.002, 0], + "ti": [-0.068, 0.003, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 50, + "s": [384.937, 124.237, 0], + "to": [0.068, -0.003, 0], + "ti": [-0.061, 0.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 51, + "s": [385.131, 124.223, 0], + "to": [0.061, -0.006, 0], + "ti": [-0.052, 0.011, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 52, + "s": [385.302, 124.198, 0], + "to": [0.052, -0.011, 0], + "ti": [-0.041, 0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 53, + "s": [385.442, 124.158, 0], + "to": [0.041, -0.017, 0], + "ti": [-0.028, 0.024, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 54, + "s": [385.546, 124.097, 0], + "to": [0.028, -0.024, 0], + "ti": [-0.026, 0.021, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 55, + "s": [385.612, 124.016, 0], + "to": [0.026, -0.021, 0], + "ti": [-0.034, 0.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.813 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 56, + "s": [385.701, 123.974, 0], + "to": [0.034, -0.006, 0], + "ti": [-0.043, -0.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.15 }, + "t": 57, + "s": [385.818, 123.981, 0], + "to": [0.043, 0.01, 0], + "ti": [-0.048, -0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 58, + "s": [385.957, 124.035, 0], + "to": [0.048, 0.025, 0], + "ti": [-0.025, -0.016, 0] + }, + { "t": 59, "s": [386.107, 124.13, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 0.679, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 8, + "s": [49.219, 103.811, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.111, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.166, 0.113, 0] }, + "t": 9, + "s": [96.918, 92.8, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 29.641, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.048, 19.517, 0] }, + "t": 10, + "s": [80.991, 61.448, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.606, 1.004, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.607, 0.083, 0] }, + "t": 11, + "s": [118.185, 61.313, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.989, 0.964, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.004, 0] }, + "t": 12, + "s": [124.101, 107.653, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.917, 0.896, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.013, -0.062, 0] }, + "t": 13, + "s": [75.181, 59.182, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-66.49, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-62.917, 0.413, 0] }, + "t": 14, + "s": [117.68, 86.992, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 0.5, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.083, -0.053, 0] }, + "t": 15, + "s": [117.624, 94.022, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.649, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.154, 0.1, 0] }, + "t": 16, + "s": [72.153, 89.729, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.994, 0.616, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.109, -0.07, 0] }, + "t": 17, + "s": [88.106, 68.252, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.006, 0.106, 0] }, + "t": 18, + "s": [139.441, 79.894, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.246, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.681, -0.189, 0] }, + "t": 19, + "s": [91.59, 121.922, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.031, 1.095, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, -0.001, 0] }, + "t": 20, + "s": [96.806, 109.051, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.909, 0.978, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.023, 0.044, 0] }, + "t": 21, + "s": [76.174, 121.699, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.265, 0.951, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.035, -0.029, 0] }, + "t": 22, + "s": [104.516, 94.655, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.009, 0.92, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.078, -0.118, 0] }, + "t": 23, + "s": [106.997, 114.689, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.918, 7.262, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.008, -1.803, 0] }, + "t": 24, + "s": [66.837, 106.412, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-2.408, 1.035, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-4.987, 0.082, 0] }, + "t": 25, + "s": [111.464, 106.778, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 1.046, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.085, 0.025, 0] }, + "t": 26, + "s": [110.731, 78.932, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.884, 0.945, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, 0.03, 0] }, + "t": 27, + "s": [81.464, 118.575, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.215, 0.686, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.293, -0.158, 0] }, + "t": 28, + "s": [101.82, 56.948, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 0.967, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.06, 0.113, 0] }, + "t": 29, + "s": [109.895, 78.255, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.916, 0.979, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.066, -0.056, 0] }, + "t": 30, + "s": [80.942, 137.249, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-6.827, 1.076, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [12.816, -0.028, 0] }, + "t": 31, + "s": [97.117, 101.933, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.453, 0.923, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.084, 0.04, 0] }, + "t": 32, + "s": [97.223, 128.384, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.989, 0.619, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, -0.935, 0] }, + "t": 33, + "s": [107.061, 77.679, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.924, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.013, 0.107, 0] }, + "t": 34, + "s": [43.764, 81.828, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, -1.177, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.143, -0.844, 0] }, + "t": 35, + "s": [98.569, 96.663, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.435, 0.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-2.31, 0.087, 0] }, + "t": 36, + "s": [78.363, 95.331, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.931, 2.861, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, -3.479, 0] }, + "t": 37, + "s": [79.067, 61.85, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.227, 0.912, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.407, 0.08, 0] }, + "t": 38, + "s": [66.248, 62.633, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.092, -2.126, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.093, 1.726, 0] }, + "t": 39, + "s": [68.428, 44.364, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.901, 1.019, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, 0.086, 0] }, + "t": 40, + "s": [86.481, 43.437, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.779, 1.036, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.541, 0.015, 0] }, + "t": 41, + "s": [48.571, 9.591, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.776, 1.009, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.134, 0.025, 0] }, + "t": 42, + "s": [41.665, 51.149, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.092, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.133, 0.008, 0] }, + "t": 43, + "s": [30.243, -8.194, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.935, 9.657, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, 20.432, 0] }, + "t": 44, + "s": [10.976, 57.43, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.606, 0.758, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.287, 0.083, 0] }, + "t": 45, + "s": [51.537, 57.699, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.918, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.106, 0.127, 0] }, + "t": 46, + "s": [42.412, 29.51, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-8.496, 0.903, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-5.253, -0.014, 0] }, + "t": 47, + "s": [8.401, -24.232, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.961, 0.669, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.084, 0.582, 0] }, + "t": 48, + "s": [8.932, 21.756, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.072, 0.111, 0] }, + "t": 49, + "s": [68.92, 29.447, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.049, 0.445, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.094, 1.927, 0] }, + "t": 50, + "s": [36.715, 52.274, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.899, 1.631, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.031, 0.098, 0] }, + "t": 51, + "s": [51.861, 53.306, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.136, 0.908, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.481, 0.074, 0] }, + "t": 52, + "s": [27.738, 59.151, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.062, 0.322, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.052, 0.928, 0] }, + "t": 53, + "s": [22.685, 9.056, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.882, 0.979, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.035, 0.095, 0] }, + "t": 54, + "s": [35.966, 4.115, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.028, 0.812, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.285, -0.029, 0] }, + "t": 55, + "s": [12.831, -31.117, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.846, 0.873, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.021, 0.15, 0] }, + "t": 56, + "s": [3.287, -4.957, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.815, 0.964, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.182, 0.241, 0] }, + "t": 57, + "s": [16.066, 27.774, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.152, -0.063, 0] }, + "t": 58, + "s": [26.832, 45.045, 100] + }, + { "t": 59, "s": [39.927, 35.232, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167325382607, 0.716982433843, 1, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 60, + "st": 8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 36, + "ty": 4, + "nm": "Shape Layer 16", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 14, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 36, + "s": [100] + }, + { "t": 52, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.587 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 9, + "s": [275.519, 261.1, 0], + "to": [-0.307, -0.313, 0], + "ti": [1.698, 1.185, 0] + }, + { + "i": { "x": 0.833, "y": 0.774 }, + "o": { "x": 0.167, "y": 0.104 }, + "t": 10, + "s": [273.678, 259.22, 0], + "to": [-1.698, -1.185, 0], + "ti": [1.745, -2.083, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.132 }, + "t": 11, + "s": [265.331, 253.99, 0], + "to": [-1.745, 2.083, 0], + "ti": [-0.013, -6.364, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 12, + "s": [263.209, 271.718, 0], + "to": [0.013, 6.364, 0], + "ti": [-0.69, -6.377, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 13, + "s": [265.411, 292.176, 0], + "to": [0.69, 6.377, 0], + "ti": [-0.533, -5.437, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 14, + "s": [267.35, 309.98, 0], + "to": [0.533, 5.437, 0], + "ti": [-0.321, -4.543, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 15, + "s": [268.609, 324.8, 0], + "to": [0.321, 4.543, 0], + "ti": [-0.144, -3.839, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 16, + "s": [269.275, 337.239, 0], + "to": [0.144, 3.839, 0], + "ti": [-0.006, -3.291, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 17, + "s": [269.475, 347.837, 0], + "to": [0.006, 3.291, 0], + "ti": [0.101, -2.855, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 18, + "s": [269.314, 356.986, 0], + "to": [-0.101, 2.855, 0], + "ti": [0.186, -2.499, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 19, + "s": [268.867, 364.967, 0], + "to": [-0.186, 2.499, 0], + "ti": [0.253, -2.201, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 20, + "s": [268.196, 371.978, 0], + "to": [-0.253, 2.201, 0], + "ti": [0.306, -1.947, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 21, + "s": [267.347, 378.17, 0], + "to": [-0.306, 1.947, 0], + "ti": [0.347, -1.728, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [266.36, 383.661, 0], + "to": [-0.347, 1.728, 0], + "ti": [0.377, -1.535, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 23, + "s": [265.266, 388.537, 0], + "to": [-0.377, 1.535, 0], + "ti": [0.399, -1.366, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 24, + "s": [264.095, 392.873, 0], + "to": [-0.399, 1.366, 0], + "ti": [0.413, -1.215, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 25, + "s": [262.872, 396.731, 0], + "to": [-0.413, 1.215, 0], + "ti": [0.42, -1.082, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [261.617, 400.166, 0], + "to": [-0.42, 1.082, 0], + "ti": [0.421, -0.962, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [260.351, 403.22, 0], + "to": [-0.421, 0.962, 0], + "ti": [0.416, -0.854, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [259.092, 405.935, 0], + "to": [-0.416, 0.854, 0], + "ti": [0.407, -0.759, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [257.854, 408.347, 0], + "to": [-0.407, 0.759, 0], + "ti": [0.395, -0.675, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [256.649, 410.491, 0], + "to": [-0.395, 0.675, 0], + "ti": [0.379, -0.6, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 31, + "s": [255.487, 412.396, 0], + "to": [-0.379, 0.6, 0], + "ti": [0.361, -0.535, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 32, + "s": [254.375, 414.092, 0], + "to": [-0.361, 0.535, 0], + "ti": [0.343, -0.477, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 33, + "s": [253.318, 415.604, 0], + "to": [-0.343, 0.477, 0], + "ti": [0.323, -0.427, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 34, + "s": [252.319, 416.955, 0], + "to": [-0.323, 0.427, 0], + "ti": [0.304, -0.384, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [251.378, 418.167, 0], + "to": [-0.304, 0.384, 0], + "ti": [0.285, -0.347, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 36, + "s": [250.495, 419.259, 0], + "to": [-0.285, 0.347, 0], + "ti": [0.268, -0.316, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 37, + "s": [249.666, 420.25, 0], + "to": [-0.268, 0.316, 0], + "ti": [0.252, -0.289, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 38, + "s": [248.887, 421.154, 0], + "to": [-0.252, 0.289, 0], + "ti": [0.235, -0.266, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 39, + "s": [248.153, 421.986, 0], + "to": [-0.235, 0.266, 0], + "ti": [0.208, -0.241, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 40, + "s": [247.479, 422.749, 0], + "to": [-0.208, 0.241, 0], + "ti": [0.175, -0.214, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 41, + "s": [246.907, 423.43, 0], + "to": [-0.175, 0.214, 0], + "ti": [0.145, -0.189, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 42, + "s": [246.43, 424.033, 0], + "to": [-0.145, 0.189, 0], + "ti": [0.118, -0.164, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 43, + "s": [246.038, 424.562, 0], + "to": [-0.118, 0.164, 0], + "ti": [0.094, -0.141, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 44, + "s": [245.721, 425.02, 0], + "to": [-0.094, 0.141, 0], + "ti": [0.073, -0.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 45, + "s": [245.472, 425.408, 0], + "to": [-0.073, 0.118, 0], + "ti": [0.055, -0.096, 0] + }, + { + "i": { "x": 0.833, "y": 0.856 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 46, + "s": [245.282, 425.73, 0], + "to": [-0.055, 0.096, 0], + "ti": [0.039, -0.074, 0] + }, + { + "i": { "x": 0.833, "y": 0.862 }, + "o": { "x": 0.167, "y": 0.197 }, + "t": 47, + "s": [245.143, 425.985, 0], + "to": [-0.039, 0.074, 0], + "ti": [0.025, -0.053, 0] + }, + { + "i": { "x": 0.833, "y": 0.853 }, + "o": { "x": 0.167, "y": 0.211 }, + "t": 48, + "s": [245.048, 426.176, 0], + "to": [-0.025, 0.053, 0], + "ti": [0.019, -0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.822 }, + "o": { "x": 0.167, "y": 0.193 }, + "t": 49, + "s": [244.991, 426.303, 0], + "to": [-0.019, 0.036, 0], + "ti": [0.026, -0.027, 0] + }, + { + "i": { "x": 0.833, "y": 0.815 }, + "o": { "x": 0.167, "y": 0.157 }, + "t": 50, + "s": [244.933, 426.392, 0], + "to": [-0.026, 0.027, 0], + "ti": [0.039, -0.021, 0] + }, + { + "i": { "x": 0.833, "y": 0.814 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 51, + "s": [244.836, 426.464, 0], + "to": [-0.039, 0.021, 0], + "ti": [0.052, -0.016, 0] + }, + { + "i": { "x": 0.833, "y": 0.816 }, + "o": { "x": 0.167, "y": 0.151 }, + "t": 52, + "s": [244.701, 426.519, 0], + "to": [-0.052, 0.016, 0], + "ti": [0.065, -0.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.818 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 53, + "s": [244.525, 426.558, 0], + "to": [-0.065, 0.01, 0], + "ti": [0.079, -0.004, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.154 }, + "t": 54, + "s": [244.308, 426.579, 0], + "to": [-0.079, 0.004, 0], + "ti": [0.092, 0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 55, + "s": [244.051, 426.582, 0], + "to": [-0.092, -0.002, 0], + "ti": [0.105, 0.007, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.157 }, + "t": 56, + "s": [243.755, 426.569, 0], + "to": [-0.105, -0.007, 0], + "ti": [0.117, 0.012, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 57, + "s": [243.422, 426.54, 0], + "to": [-0.117, -0.012, 0], + "ti": [0.128, 0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 58, + "s": [243.055, 426.497, 0], + "to": [-0.128, -0.017, 0], + "ti": [0.066, 0.01, 0] + }, + { "t": 59, "s": [242.656, 426.439, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.563, 1.02, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 9, + "s": [92.322, 93.922, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.109, 0.948, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.103, 0.016, 0] }, + "t": 10, + "s": [95.253, 42.092, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.054, 0.89, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.047, -0.14, 0] }, + "t": 11, + "s": [107.675, 106.42, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 0.725, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.033, 0.342, 0] }, + "t": 12, + "s": [79.026, 82.445, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.393, 1.033, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.475, 0.12, 0] }, + "t": 13, + "s": [126.398, 74.729, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.968, 0.877, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.097, 0.024, 0] }, + "t": 14, + "s": [119.33, 57.001, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.834, 1.214, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.053, 0.26, 0] }, + "t": 15, + "s": [74.88, 81.854, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.042, 0.975, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.06, 0] }, + "t": 16, + "s": [102.06, 93.554, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 0.977, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.028, -0.035, 0] }, + "t": 17, + "s": [129.135, 51.875, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.863, 1.026, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.389, -0.032, 0] }, + "t": 18, + "s": [88.364, 81.23, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.102, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.212, 0.02, 0] }, + "t": 19, + "s": [77.256, 59.947, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.698, 1.03, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.046, -0.051, 0] }, + "t": 20, + "s": [70.037, 87.966, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.995, 1.049, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, 0.022, 0] }, + "t": 21, + "s": [86.104, 70.53, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.904, 1.07, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.006, 0.031, 0] }, + "t": 22, + "s": [128.201, 94.177, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.376, 0.967, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.627, 0.038, 0] }, + "t": 23, + "s": [88.836, 56.66, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 0.977, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.068, -0.054, 0] }, + "t": 24, + "s": [82.802, 125.882, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.976, 1.097, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.002, -0.031, 0] }, + "t": 25, + "s": [116.041, 83.757, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.9, 0.955, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.033, 0.045, 0] }, + "t": 26, + "s": [83.397, 114.487, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.069, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.508, -0.099, 0] }, + "t": 27, + "s": [106.769, 47.904, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.758, 0.953, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.497, 0] }, + "t": 28, + "s": [111.355, 78.308, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.163, 1.569, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.127, -0.106, 0] }, + "t": 29, + "s": [102.953, 84.434, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.9, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.073, 0] }, + "t": 30, + "s": [86.963, 81.742, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.429, 1.529, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.493, 1.851, 0] }, + "t": 31, + "s": [134.26, 102.822, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 1.156, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, 0.072, 0] }, + "t": 32, + "s": [143.885, 103.815, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 1.116, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.171, 0.054, 0] }, + "t": 33, + "s": [84.672, 96.517, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.547, 0.897, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.171, 0.048, 0] }, + "t": 34, + "s": [104.079, 117.449, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.772, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.088, 0.439, 0] }, + "t": 35, + "s": [102.79, 67.476, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 1.47, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.131, 2.037, 0] }, + "t": 36, + "s": [80.144, 55.767, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.822, 1.082, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, 0.071, 0] }, + "t": 37, + "s": [40.802, 55.268, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.966, 0.556, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.157, 0.041, 0] }, + "t": 38, + "s": [68.335, 58.584, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.795, 1.044, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.058, 0.103, 0] }, + "t": 39, + "s": [99.544, 51.985, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.792, 1.038, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, 0.029, 0] }, + "t": 40, + "s": [81.176, 23.398, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, 0.994, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.139, 0.026, 0] }, + "t": 41, + "s": [54.468, 66.977, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.334, 0.99, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.427, -0.006, 0] }, + "t": 42, + "s": [14.561, 3.526, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.853, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, -0.011, 0] }, + "t": 43, + "s": [4.89, 62.465, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.066, 1.037, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.192, -0.037, 0] }, + "t": 44, + "s": [53.289, 10.271, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.882, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.037, 0.026, 0] }, + "t": 45, + "s": [90.493, 46.486, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.078, 0.738, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.284, -0.203, 0] }, + "t": 46, + "s": [23.844, -5.784, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.862, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 0.122, 0] }, + "t": 47, + "s": [-3.767, 9.434, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.96, 1.136, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.211, 0.454, 0] }, + "t": 48, + "s": [49.843, 42.088, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.76, 0.903, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.077, 0.052, 0] }, + "t": 49, + "s": [84.879, 49.437, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.214, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.128, 0.58, 0] }, + "t": 50, + "s": [66.624, 30.104, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.972, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.222, 0.093, 0] }, + "t": 51, + "s": [32.305, 26.858, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.916, 1.208, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.117, -0.043, 0] }, + "t": 52, + "s": [11.683, -0.538, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.198, 0.965, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [10.387, 0.06, 0] }, + "t": 53, + "s": [20.245, 17.535, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.475, 0.823, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.078, -0.06, 0] }, + "t": 54, + "s": [20.314, -45.662, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.442, 0.954, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, 0.157, 0] }, + "t": 55, + "s": [19.25, -8.935, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 1.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, -0.101, 0] }, + "t": 56, + "s": [13.603, 32.461, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.007, 0.766, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.071, 0.01, 0] }, + "t": 57, + "s": [49.18, 13.788, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, 0.129, 0] }, + "t": 58, + "s": [29.913, 35.117, 100] + }, + { "t": 59, "s": [50.756, 73.724, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167325382607, 0.716982433843, 1, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 9, + "op": 60, + "st": 9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 37, + "ty": 4, + "nm": "Shape Layer 15", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 6, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 33, + "s": [100] + }, + { "t": 49, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.63 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 6, + "s": [275.485, 257.563, 0], + "to": [-0.11, -0.249, 0], + "ti": [0.689, 1.001, 0] + }, + { + "i": { "x": 0.833, "y": 0.767 }, + "o": { "x": 0.167, "y": 0.108 }, + "t": 7, + "s": [274.824, 256.066, 0], + "to": [-0.689, -1.001, 0], + "ti": [1.729, 2.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.13 }, + "t": 8, + "s": [271.354, 251.559, 0], + "to": [-1.729, -2.01, 0], + "ti": [2.505, 2.573, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 9, + "s": [264.452, 244.008, 0], + "to": [-2.505, -2.573, 0], + "ti": [2.58, 2.412, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 10, + "s": [256.321, 236.124, 0], + "to": [-2.58, -2.412, 0], + "ti": [2.262, 1.991, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 11, + "s": [248.97, 229.538, 0], + "to": [-2.262, -1.991, 0], + "ti": [1.91, 1.643, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 12, + "s": [242.747, 224.176, 0], + "to": [-1.91, -1.643, 0], + "ti": [1.608, 1.404, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 13, + "s": [237.508, 219.678, 0], + "to": [-1.608, -1.404, 0], + "ti": [1.343, 1.257, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 14, + "s": [233.099, 215.75, 0], + "to": [-1.343, -1.257, 0], + "ti": [1.062, 1.209, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 15, + "s": [229.447, 212.138, 0], + "to": [-1.062, -1.209, 0], + "ti": [0.452, 1.267, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 16, + "s": [226.724, 208.498, 0], + "to": [-0.452, -1.267, 0], + "ti": [-0.52, 1.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 17, + "s": [226.732, 204.537, 0], + "to": [0.52, -1.026, 0], + "ti": [-1.055, 0.562, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 18, + "s": [229.844, 202.343, 0], + "to": [1.055, -0.562, 0], + "ti": [-1.033, 0.324, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [233.062, 201.165, 0], + "to": [1.033, -0.324, 0], + "ti": [-0.951, 0.215, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [236.043, 200.396, 0], + "to": [0.951, -0.215, 0], + "ti": [-0.867, 0.144, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [238.767, 199.873, 0], + "to": [0.867, -0.144, 0], + "ti": [-0.789, 0.088, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [241.247, 199.533, 0], + "to": [0.789, -0.088, 0], + "ti": [-0.717, 0.039, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [243.501, 199.346, 0], + "to": [0.717, -0.039, 0], + "ti": [-0.654, 0.005, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [245.548, 199.298, 0], + "to": [0.654, -0.005, 0], + "ti": [-0.601, -0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [247.425, 199.317, 0], + "to": [0.601, 0.009, 0], + "ti": [-0.552, -0.013, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [249.152, 199.353, 0], + "to": [0.552, 0.013, 0], + "ti": [-0.504, -0.015, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [250.734, 199.397, 0], + "to": [0.504, 0.015, 0], + "ti": [-0.457, -0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [252.175, 199.441, 0], + "to": [0.457, 0.014, 0], + "ti": [-0.412, -0.011, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [253.479, 199.479, 0], + "to": [0.412, 0.011, 0], + "ti": [-0.367, -0.007, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 30, + "s": [254.647, 199.506, 0], + "to": [0.367, 0.007, 0], + "ti": [-0.324, -0.001, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 31, + "s": [255.684, 199.519, 0], + "to": [0.324, 0.001, 0], + "ti": [-0.281, 0.005, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 32, + "s": [256.59, 199.514, 0], + "to": [0.281, -0.005, 0], + "ti": [-0.238, 0.012, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 33, + "s": [257.369, 199.488, 0], + "to": [0.238, -0.012, 0], + "ti": [-0.197, 0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 34, + "s": [258.021, 199.442, 0], + "to": [0.197, -0.019, 0], + "ti": [-0.156, 0.027, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.189 }, + "t": 35, + "s": [258.548, 199.373, 0], + "to": [0.156, -0.027, 0], + "ti": [-0.116, 0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.856 }, + "o": { "x": 0.167, "y": 0.194 }, + "t": 36, + "s": [258.956, 199.282, 0], + "to": [0.116, -0.034, 0], + "ti": [-0.078, 0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.199 }, + "t": 37, + "s": [259.247, 199.167, 0], + "to": [0.078, -0.042, 0], + "ti": [-0.042, 0.049, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.191 }, + "t": 38, + "s": [259.427, 199.031, 0], + "to": [0.042, -0.049, 0], + "ti": [-0.007, 0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.809 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 39, + "s": [259.498, 198.875, 0], + "to": [0.007, -0.055, 0], + "ti": [0.027, 0.061, 0] + }, + { + "i": { "x": 0.833, "y": 0.808 }, + "o": { "x": 0.167, "y": 0.148 }, + "t": 40, + "s": [259.466, 198.699, 0], + "to": [-0.027, -0.061, 0], + "ti": [0.059, 0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.813 }, + "o": { "x": 0.167, "y": 0.147 }, + "t": 41, + "s": [259.336, 198.506, 0], + "to": [-0.059, -0.066, 0], + "ti": [0.089, 0.071, 0] + }, + { + "i": { "x": 0.833, "y": 0.818 }, + "o": { "x": 0.167, "y": 0.15 }, + "t": 42, + "s": [259.112, 198.3, 0], + "to": [-0.089, -0.071, 0], + "ti": [0.117, 0.074, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 43, + "s": [258.802, 198.083, 0], + "to": [-0.117, -0.074, 0], + "ti": [0.142, 0.075, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 44, + "s": [258.411, 197.859, 0], + "to": [-0.142, -0.075, 0], + "ti": [0.165, 0.075, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 45, + "s": [257.947, 197.632, 0], + "to": [-0.165, -0.075, 0], + "ti": [0.182, 0.074, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 46, + "s": [257.418, 197.407, 0], + "to": [-0.182, -0.074, 0], + "ti": [0.188, 0.072, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 47, + "s": [256.856, 197.186, 0], + "to": [-0.188, -0.072, 0], + "ti": [0.188, 0.068, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 48, + "s": [256.29, 196.974, 0], + "to": [-0.188, -0.068, 0], + "ti": [0.184, 0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 49, + "s": [255.73, 196.777, 0], + "to": [-0.184, -0.062, 0], + "ti": [0.178, 0.054, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 50, + "s": [255.185, 196.601, 0], + "to": [-0.178, -0.054, 0], + "ti": [0.168, 0.043, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 51, + "s": [254.664, 196.453, 0], + "to": [-0.168, -0.043, 0], + "ti": [0.154, 0.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 52, + "s": [254.178, 196.341, 0], + "to": [-0.154, -0.03, 0], + "ti": [0.136, 0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 53, + "s": [253.74, 196.272, 0], + "to": [-0.136, -0.014, 0], + "ti": [0.114, -0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 54, + "s": [253.361, 196.256, 0], + "to": [-0.114, 0.009, 0], + "ti": [0.088, -0.039, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 55, + "s": [253.059, 196.325, 0], + "to": [-0.088, 0.039, 0], + "ti": [0.062, -0.069, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 56, + "s": [252.835, 196.49, 0], + "to": [-0.062, 0.069, 0], + "ti": [0.038, -0.096, 0] + }, + { + "i": { "x": 0.833, "y": 0.82 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 57, + "s": [252.687, 196.74, 0], + "to": [-0.038, 0.096, 0], + "ti": [0.015, -0.119, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.155 }, + "t": 58, + "s": [252.609, 197.066, 0], + "to": [-0.015, 0.119, 0], + "ti": [0.002, -0.065, 0] + }, + { "t": 59, "s": [252.597, 197.456, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.755, 1.005, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 6, + "s": [82.502, 83.365, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.13, 0.857, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.126, 0.005, 0] }, + "t": 7, + "s": [92.567, 121.915, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 1.043, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, 0.199, 0] }, + "t": 8, + "s": [112.053, 80.824, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.879, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.103, 0.029, 0] }, + "t": 9, + "s": [62.128, 51.3, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.612, 1.126, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.269, 0.247, 0] }, + "t": 10, + "s": [84.48, 96.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 0.869, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.106, 0.05, 0] }, + "t": 11, + "s": [94.531, 118.987, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.7, 1.007, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.155, 0.229, 0] }, + "t": 12, + "s": [131.266, 61.724, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.907, 0.775, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, 0.006, 0] }, + "t": 13, + "s": [118.417, 29.003, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.355, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.826, 0.132, 0] }, + "t": 14, + "s": [85.075, 64.302, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.982, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, -0.001, 0] }, + "t": 15, + "s": [81.335, 124.25, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.023, 0.465, 0] }, + "t": 16, + "s": [101.012, 65.094, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-1.675, 1.303, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.722, 0.245, 0] }, + "t": 17, + "s": [85.57, 52.183, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.895, 0.888, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.086, 0.065, 0] }, + "t": 18, + "s": [84.785, 45.511, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.611, 0.792, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.406, 0.329, 0] }, + "t": 19, + "s": [60.369, 76.428, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.931, 1.274, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.139, 0] }, + "t": 20, + "s": [54.064, 86.903, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.399, 0.064, 0] }, + "t": 21, + "s": [106.629, 102.562, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.815, 0.921, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.186, -0.033, 0] }, + "t": 22, + "s": [97.556, 35.47, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.903, 2.194, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.152, -1.466, 0] }, + "t": 23, + "s": [90.213, 83.359, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.319, 1.048, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.578, 0.078, 0] }, + "t": 24, + "s": [81.292, 80.783, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.967, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.08, 0.031, 0] }, + "t": 25, + "s": [79.79, 120.257, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.122, -0.054, 0] }, + "t": 26, + "s": [123.086, 57.838, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.232, 0.873, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.07, -0.045, 0] }, + "t": 27, + "s": [105.488, 95.827, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.055, 0.885, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, 0.244, 0] }, + "t": 28, + "s": [115.025, 71.124, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 1.655, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.033, 0.303, 0] }, + "t": 29, + "s": [78.946, 58.294, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.622, 0.901, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.606, 0.074, 0] }, + "t": 30, + "s": [138.694, 53.428, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.751, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.515, 0] }, + "t": 31, + "s": [141.965, 96.547, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.001, 1.291, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, 0.125, 0] }, + "t": 32, + "s": [114.285, 104.867, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.034, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.001, 0.065, 0] }, + "t": 33, + "s": [88.923, 121.377, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.803, 1.172, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.024, -0.633, 0] }, + "t": 34, + "s": [114.574, 47.291, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.958, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.145, 0.056, 0] }, + "t": 35, + "s": [78.466, 55.906, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.8, 1.065, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.086, -0.111, 0] }, + "t": 36, + "s": [29.34, 29.523, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.143, 0.036, 0] }, + "t": 37, + "s": [53.468, 40.837, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.752, 0.669, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.176, -0.016, 0] }, + "t": 38, + "s": [87.347, 20.728, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.766, 1.02, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.126, 0.111, 0] }, + "t": 39, + "s": [76.456, 37.629, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.931, 0.959, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.129, 0.016, 0] }, + "t": 40, + "s": [54.995, 87.783, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.044, 1.088, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.403, -0.082, 0] }, + "t": 41, + "s": [16.235, 25.439, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.502, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.029, 0.043, 0] }, + "t": 42, + "s": [22.876, 56.837, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, -0.033, 0] }, + "t": 43, + "s": [12.722, -7.888, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.475, 0.348, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.373, -1.253, 0] }, + "t": 44, + "s": [84.051, 38.375, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.949, 0.884, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.099, 0.096, 0] }, + "t": 45, + "s": [71.021, 35.491, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.795, 1.365, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.133, 0.294, 0] }, + "t": 46, + "s": [1.946, 15.801, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.93, 1.015, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.14, 0.068, 0] }, + "t": 47, + "s": [28.567, 8.027, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.248, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.452, 0.012, 0] }, + "t": 48, + "s": [67.532, 49.862, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 1.749, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, -1.199, 0] }, + "t": 49, + "s": [61.469, 0.74, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.813, 1.078, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.542, 0.075, 0] }, + "t": 50, + "s": [12.831, 3.931, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.066, 0.975, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.15, 0.04, 0] }, + "t": 51, + "s": [19.315, -27.951, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.028, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.037, -0.035, 0] }, + "t": 52, + "s": [27.419, 33.62, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.067, 0.472, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.021, -0.242, 0] }, + "t": 53, + "s": [12.92, -9.628, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.982, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.037, 0.099, 0] }, + "t": 54, + "s": [32.326, 1.452, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.022, 0.009, 0] }, + "t": 55, + "s": [-2.724, 60.543, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, -0.245, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.186, -1.156, 0] }, + "t": 56, + "s": [24.945, -5.97, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.875, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.035, 0.089, 0] }, + "t": 57, + "s": [47.481, -1.498, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.25, -0.046, 0] }, + "t": 58, + "s": [31.587, 60.823, 100] + }, + { "t": 59, "s": [23.622, 20.517, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sr", + "sy": 2, + "d": 1, + "pt": { "a": 0, "k": 3, "ix": 3 }, + "p": { "a": 0, "k": [6, 32], "ix": 4 }, + "r": { "a": 0, "k": 0, "ix": 5 }, + "or": { "a": 0, "k": 6.599, "ix": 7 }, + "os": { "a": 0, "k": 0, "ix": 9 }, + "ix": 1, + "nm": "Polystar Path 1", + "mn": "ADBE Vector Shape - Star", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167325382607, 0.716982433843, 1, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-7.382, -25.677], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Polystar 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 6, + "op": 60, + "st": 6, + "bm": 0 + }, + { + "ddd": 0, + "ind": 38, + "ty": 4, + "nm": "Shape Layer 14", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 34, + "s": [100] + }, + { "t": 50, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.588 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 7, + "s": [276.873, 250.83, 0], + "to": [-0.189, -0.223, 0], + "ti": [1.057, 0.986, 0] + }, + { + "i": { "x": 0.833, "y": 0.763 }, + "o": { "x": 0.167, "y": 0.104 }, + "t": 8, + "s": [275.739, 249.492, 0], + "to": [-1.057, -0.986, 0], + "ti": [2.736, 1.782, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 9, + "s": [270.529, 244.915, 0], + "to": [-2.736, -1.782, 0], + "ti": [4.156, 1.618, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 10, + "s": [259.324, 238.803, 0], + "to": [-4.156, -1.618, 0], + "ti": [4.345, 0.759, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 11, + "s": [245.595, 235.21, 0], + "to": [-4.345, -0.759, 0], + "ti": [3.769, 0.09, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 12, + "s": [233.251, 234.251, 0], + "to": [-3.769, -0.09, 0], + "ti": [3.138, -0.25, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 13, + "s": [222.982, 234.672, 0], + "to": [-3.138, 0.25, 0], + "ti": [2.634, -0.412, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 14, + "s": [214.421, 235.749, 0], + "to": [-2.634, 0.412, 0], + "ti": [2.24, -0.491, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 15, + "s": [207.179, 237.146, 0], + "to": [-2.24, 0.491, 0], + "ti": [1.931, -0.529, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 16, + "s": [200.979, 238.697, 0], + "to": [-1.931, 0.529, 0], + "ti": [1.683, -0.547, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 17, + "s": [195.596, 240.321, 0], + "to": [-1.683, 0.547, 0], + "ti": [1.48, -0.555, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 18, + "s": [190.881, 241.977, 0], + "to": [-1.48, 0.555, 0], + "ti": [1.309, -0.559, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [186.716, 243.649, 0], + "to": [-1.309, 0.559, 0], + "ti": [1.16, -0.566, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [183.025, 245.334, 0], + "to": [-1.16, 0.566, 0], + "ti": [1.025, -0.581, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 21, + "s": [179.755, 247.045, 0], + "to": [-1.025, 0.581, 0], + "ti": [0.884, -0.616, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [176.877, 248.822, 0], + "to": [-0.884, 0.616, 0], + "ti": [0.678, -0.697, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [174.448, 250.742, 0], + "to": [-0.678, 0.697, 0], + "ti": [0.181, -0.747, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 24, + "s": [172.806, 253.001, 0], + "to": [-0.181, 0.747, 0], + "ti": [-0.395, -0.538, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 25, + "s": [173.36, 255.224, 0], + "to": [0.395, 0.538, 0], + "ti": [-0.6, -0.241, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 26, + "s": [175.177, 256.227, 0], + "to": [0.6, 0.241, 0], + "ti": [-0.564, -0.106, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 27, + "s": [176.961, 256.669, 0], + "to": [0.564, 0.106, 0], + "ti": [-0.502, -0.043, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 28, + "s": [178.564, 256.865, 0], + "to": [0.502, 0.043, 0], + "ti": [-0.439, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 29, + "s": [179.975, 256.928, 0], + "to": [0.439, 0.008, 0], + "ti": [-0.38, 0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 30, + "s": [181.2, 256.911, 0], + "to": [0.38, -0.014, 0], + "ti": [-0.325, 0.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 31, + "s": [182.253, 256.843, 0], + "to": [0.325, -0.028, 0], + "ti": [-0.275, 0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 32, + "s": [183.148, 256.743, 0], + "to": [0.275, -0.036, 0], + "ti": [-0.23, 0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 33, + "s": [183.9, 256.626, 0], + "to": [0.23, -0.04, 0], + "ti": [-0.19, 0.041, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 34, + "s": [184.526, 256.502, 0], + "to": [0.19, -0.041, 0], + "ti": [-0.155, 0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 35, + "s": [185.04, 256.378, 0], + "to": [0.155, -0.04, 0], + "ti": [-0.125, 0.037, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 36, + "s": [185.458, 256.261, 0], + "to": [0.125, -0.037, 0], + "ti": [-0.1, 0.031, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 37, + "s": [185.791, 256.158, 0], + "to": [0.1, -0.031, 0], + "ti": [-0.082, 0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 38, + "s": [186.06, 256.075, 0], + "to": [0.082, -0.022, 0], + "ti": [-0.073, 0.001, 0] + }, + { + "i": { "x": 0.833, "y": 0.822 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 39, + "s": [186.284, 256.027, 0], + "to": [0.073, -0.001, 0], + "ti": [-0.069, -0.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.157 }, + "t": 40, + "s": [186.495, 256.07, 0], + "to": [0.069, 0.03, 0], + "ti": [-0.067, -0.059, 0] + }, + { + "i": { "x": 0.833, "y": 0.818 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 41, + "s": [186.699, 256.205, 0], + "to": [0.067, 0.059, 0], + "ti": [-0.065, -0.084, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.154 }, + "t": 42, + "s": [186.897, 256.422, 0], + "to": [0.065, 0.084, 0], + "ti": [-0.063, -0.106, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 43, + "s": [187.09, 256.71, 0], + "to": [0.063, 0.106, 0], + "ti": [-0.062, -0.125, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 44, + "s": [187.278, 257.059, 0], + "to": [0.062, 0.125, 0], + "ti": [-0.059, -0.141, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 45, + "s": [187.46, 257.46, 0], + "to": [0.059, 0.141, 0], + "ti": [-0.057, -0.153, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 46, + "s": [187.635, 257.904, 0], + "to": [0.057, 0.153, 0], + "ti": [-0.059, -0.163, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 47, + "s": [187.802, 258.381, 0], + "to": [0.059, 0.163, 0], + "ti": [-0.07, -0.168, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 48, + "s": [187.988, 258.88, 0], + "to": [0.07, 0.168, 0], + "ti": [-0.084, -0.171, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 49, + "s": [188.22, 259.391, 0], + "to": [0.084, 0.171, 0], + "ti": [-0.097, -0.171, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 50, + "s": [188.492, 259.907, 0], + "to": [0.097, 0.171, 0], + "ti": [-0.108, -0.169, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 51, + "s": [188.799, 260.419, 0], + "to": [0.108, 0.169, 0], + "ti": [-0.117, -0.165, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 52, + "s": [189.138, 260.923, 0], + "to": [0.117, 0.165, 0], + "ti": [-0.125, -0.159, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 53, + "s": [189.502, 261.41, 0], + "to": [0.125, 0.159, 0], + "ti": [-0.13, -0.151, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 54, + "s": [189.886, 261.876, 0], + "to": [0.13, 0.151, 0], + "ti": [-0.134, -0.141, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 55, + "s": [190.284, 262.315, 0], + "to": [0.134, 0.141, 0], + "ti": [-0.135, -0.13, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 56, + "s": [190.69, 262.722, 0], + "to": [0.135, 0.13, 0], + "ti": [-0.135, -0.117, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 57, + "s": [191.097, 263.093, 0], + "to": [0.135, 0.117, 0], + "ti": [-0.132, -0.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 58, + "s": [191.499, 263.423, 0], + "to": [0.132, 0.103, 0], + "ti": [-0.065, -0.048, 0] + }, + { "t": 59, "s": [191.888, 263.709, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.973, 0.541, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 7, + "s": [98.652, 70.754, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.848, 0.518, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.04, 0.102, 0] }, + "t": 8, + "s": [52.407, 72.577, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.779, 0.997, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.184, 0.101, 0] }, + "t": 9, + "s": [83.757, 80.783, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.134, -0.003, 0] }, + "t": 10, + "s": [109.776, 120.093, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.877, 0.951, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.028, 0.222, 0] }, + "t": 11, + "s": [152.905, 82.158, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.679, 0.626, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.257, -0.12, 0] }, + "t": 12, + "s": [120.66, 59.419, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.91, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.107, 0] }, + "t": 13, + "s": [105.207, 68.721, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.545, 0.804, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.14, -0.083, 0] }, + "t": 14, + "s": [61.164, 101.207, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 1.003, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.072, 0.145, 0] }, + "t": 15, + "s": [57.69, 84.913, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.643, 0.859, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.256, 0.003, 0] }, + "t": 16, + "s": [83.888, 62.79, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.821, 0.798, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.109, 0.204, 0] }, + "t": 17, + "s": [77.451, 85.785, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.087, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.156, 0.142, 0] }, + "t": 18, + "s": [56.288, 101.636, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 1.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.042, 0.454, 0] }, + "t": 19, + "s": [32.111, 124.298, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.091, 0.877, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.178, 0.076, 0] }, + "t": 20, + "s": [81.428, 129.386, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.009, 0.967, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.043, 0.259, 0] }, + "t": 21, + "s": [65.685, 67.723, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.955, 0.799, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.008, -0.054, 0] }, + "t": 22, + "s": [98.593, 38.482, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.732, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.096, 0.142, 0] }, + "t": 23, + "s": [62.324, 56.222, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.936, 0.271, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.121, 0.546, 0] }, + "t": 24, + "s": [79.166, 81.278, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.276, 0.094, 0] }, + "t": 25, + "s": [116.554, 85.792, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.592, 0.744, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.377, -0.236, 0] }, + "t": 26, + "s": [107.89, 120.793, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.083, 0.766, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.124, 0] }, + "t": 27, + "s": [109.46, 111.669, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.998, 0.945, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.042, 0.129, 0] }, + "t": 28, + "s": [96.752, 92.8, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.958, 0.687, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.002, -0.162, 0] }, + "t": 29, + "s": [122.109, 58.72, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.192, 0.866, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.084, 0.114, 0] }, + "t": 30, + "s": [97.302, 70.284, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.964, 1.117, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, 0.219, 0] }, + "t": 31, + "s": [109.621, 102.162, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.063, 0.049, 0] }, + "t": 32, + "s": [68.943, 121.676, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.514, 0.947, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.428, -0.071, 0] }, + "t": 33, + "s": [92.184, 74.87, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 0.654, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.072, -0.144, 0] }, + "t": 34, + "s": [97.803, 100.145, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.734, 0.804, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.175, 0.11, 0] }, + "t": 35, + "s": [57.518, 90.885, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.006, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.121, 0.145, 0] }, + "t": 36, + "s": [70.533, 61.657, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.907, 0.638, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, -0.187, 0] }, + "t": 37, + "s": [99.011, 22.279, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.045, 0.875, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.773, 0.108, 0] }, + "t": 38, + "s": [68.391, 34.404, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.907, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.029, 0.249, 0] }, + "t": 39, + "s": [64.692, 74.939, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [8.194, 0.523, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.82, -0.051, 0] }, + "t": 40, + "s": [70.385, 95.308, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 0.92, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.082, 0.101, 0] }, + "t": 41, + "s": [71.029, 82.647, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.654, 0.166, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.168, -2.039, 0] }, + "t": 42, + "s": [14.793, 22.846, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.026, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.11, 0.093, 0] }, + "t": 43, + "s": [33.445, 25.195, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.908, 1.479, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.754, 0] }, + "t": 44, + "s": [92.281, 46.336, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.981, 0.951, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.884, 0.071, 0] }, + "t": 45, + "s": [15.049, 48.962, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.761, 1.318, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.024, -0.118, 0] }, + "t": 46, + "s": [7.007, 31.245, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.054, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.128, 0.066, 0] }, + "t": 47, + "s": [13.248, 38.566, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.957, 1.045, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.033, -0.241, 0] }, + "t": 48, + "s": [24.888, 3.264, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.6, 1.009, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.09, 0.029, 0] }, + "t": 49, + "s": [5.738, 12.341, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.105, 0.008, 0] }, + "t": 50, + "s": [14.963, -1.634, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 0.639, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.091, -0.275, 0] }, + "t": 51, + "s": [50.015, 13.874, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.185, 1.318, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.46, 0.108, 0] }, + "t": 52, + "s": [33.27, 10.27, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.869, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.078, 0.066, 0] }, + "t": 53, + "s": [35.84, -1.726, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.164, 0.842, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.228, -0.049, 0] }, + "t": 54, + "s": [-3.278, 56.039, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 1.064, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.177, 0] }, + "t": 55, + "s": [-25.859, 19.601, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.938, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.139, 0.036, 0] }, + "t": 56, + "s": [41.265, -12.971, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.325, 0.731, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.118, -0.247, 0] }, + "t": 57, + "s": [16.064, 44.564, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.066, 0.121, 0] }, + "t": 58, + "s": [26.47, 30.06, 100] + }, + { "t": 59, "s": [-24.557, -2.189, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.791173718022, 0.019608000213, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 7, + "op": 60, + "st": 7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 39, + "ty": 4, + "nm": "Shape Layer 13", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 15, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 37, + "s": [100] + }, + { "t": 53, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.569 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 10, + "s": [278.346, 255.953, 0], + "to": [-0.206, -0.234, 0], + "ti": [0.991, 1.248, 0] + }, + { + "i": { "x": 0.833, "y": 0.794 }, + "o": { "x": 0.167, "y": 0.103 }, + "t": 11, + "s": [277.109, 254.547, 0], + "to": [-0.991, -1.248, 0], + "ti": [0.533, 2.822, 0] + }, + { + "i": { "x": 0.833, "y": 0.801 }, + "o": { "x": 0.167, "y": 0.14 }, + "t": 12, + "s": [272.4, 248.463, 0], + "to": [-0.533, -2.822, 0], + "ti": [-2.874, 1.607, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.143 }, + "t": 13, + "s": [273.909, 237.613, 0], + "to": [2.874, -1.607, 0], + "ti": [-4.877, -0.657, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 14, + "s": [289.644, 238.823, 0], + "to": [4.877, 0.657, 0], + "ti": [-4.118, -0.868, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 15, + "s": [303.171, 241.554, 0], + "to": [4.118, 0.868, 0], + "ti": [-3.424, -0.757, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 16, + "s": [314.351, 244.031, 0], + "to": [3.424, 0.757, 0], + "ti": [-2.889, -0.625, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 17, + "s": [323.717, 246.095, 0], + "to": [2.889, 0.625, 0], + "ti": [-2.477, -0.51, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 18, + "s": [331.687, 247.782, 0], + "to": [2.477, 0.51, 0], + "ti": [-2.154, -0.414, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 19, + "s": [338.58, 249.155, 0], + "to": [2.154, 0.414, 0], + "ti": [-1.892, -0.333, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 20, + "s": [344.611, 250.265, 0], + "to": [1.892, 0.333, 0], + "ti": [-1.675, -0.265, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 21, + "s": [349.933, 251.155, 0], + "to": [1.675, 0.265, 0], + "ti": [-1.493, -0.207, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 22, + "s": [354.663, 251.856, 0], + "to": [1.493, 0.207, 0], + "ti": [-1.344, -0.162, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 23, + "s": [358.894, 252.395, 0], + "to": [1.344, 0.162, 0], + "ti": [-1.227, -0.138, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [362.724, 252.827, 0], + "to": [1.227, 0.138, 0], + "ti": [-1.133, -0.127, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 25, + "s": [366.255, 253.222, 0], + "to": [1.133, 0.127, 0], + "ti": [-1.051, -0.117, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 26, + "s": [369.523, 253.587, 0], + "to": [1.051, 0.117, 0], + "ti": [-0.978, -0.109, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 27, + "s": [372.561, 253.926, 0], + "to": [0.978, 0.109, 0], + "ti": [-0.912, -0.101, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 28, + "s": [375.391, 254.24, 0], + "to": [0.912, 0.101, 0], + "ti": [-0.852, -0.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 29, + "s": [378.033, 254.529, 0], + "to": [0.852, 0.093, 0], + "ti": [-0.796, -0.085, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 30, + "s": [380.502, 254.795, 0], + "to": [0.796, 0.085, 0], + "ti": [-0.745, -0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 31, + "s": [382.812, 255.037, 0], + "to": [0.745, 0.076, 0], + "ti": [-0.697, -0.068, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 32, + "s": [384.972, 255.253, 0], + "to": [0.697, 0.068, 0], + "ti": [-0.651, -0.059, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 33, + "s": [386.993, 255.443, 0], + "to": [0.651, 0.059, 0], + "ti": [-0.608, -0.05, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 34, + "s": [388.881, 255.606, 0], + "to": [0.608, 0.05, 0], + "ti": [-0.567, -0.04, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 35, + "s": [390.642, 255.741, 0], + "to": [0.567, 0.04, 0], + "ti": [-0.527, -0.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 36, + "s": [392.281, 255.845, 0], + "to": [0.527, 0.03, 0], + "ti": [-0.488, -0.019, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 37, + "s": [393.801, 255.919, 0], + "to": [0.488, 0.019, 0], + "ti": [-0.45, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 38, + "s": [395.207, 255.96, 0], + "to": [0.45, 0.008, 0], + "ti": [-0.412, 0.002, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 39, + "s": [396.499, 255.969, 0], + "to": [0.412, -0.002, 0], + "ti": [-0.375, 0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 40, + "s": [397.679, 255.945, 0], + "to": [0.375, -0.014, 0], + "ti": [-0.338, 0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 41, + "s": [398.748, 255.888, 0], + "to": [0.338, -0.025, 0], + "ti": [-0.301, 0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 42, + "s": [399.706, 255.797, 0], + "to": [0.301, -0.036, 0], + "ti": [-0.264, 0.047, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 43, + "s": [400.554, 255.673, 0], + "to": [0.264, -0.047, 0], + "ti": [-0.227, 0.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 44, + "s": [401.291, 255.517, 0], + "to": [0.227, -0.057, 0], + "ti": [-0.189, 0.067, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 45, + "s": [401.915, 255.33, 0], + "to": [0.189, -0.067, 0], + "ti": [-0.151, 0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 46, + "s": [402.427, 255.112, 0], + "to": [0.151, -0.077, 0], + "ti": [-0.113, 0.086, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 47, + "s": [402.824, 254.867, 0], + "to": [0.113, -0.086, 0], + "ti": [-0.074, 0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 48, + "s": [403.104, 254.596, 0], + "to": [0.074, -0.094, 0], + "ti": [-0.034, 0.101, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 49, + "s": [403.266, 254.302, 0], + "to": [0.034, -0.101, 0], + "ti": [0.002, 0.108, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 50, + "s": [403.307, 253.989, 0], + "to": [-0.002, -0.108, 0], + "ti": [0.028, 0.114, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 51, + "s": [403.256, 253.656, 0], + "to": [-0.028, -0.114, 0], + "ti": [0.05, 0.119, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 52, + "s": [403.14, 253.307, 0], + "to": [-0.05, -0.119, 0], + "ti": [0.071, 0.117, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 53, + "s": [402.953, 252.945, 0], + "to": [-0.071, -0.117, 0], + "ti": [0.081, 0.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 54, + "s": [402.716, 252.603, 0], + "to": [-0.081, -0.103, 0], + "ti": [0.084, 0.081, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 55, + "s": [402.468, 252.328, 0], + "to": [-0.084, -0.081, 0], + "ti": [0.087, 0.059, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 56, + "s": [402.212, 252.118, 0], + "to": [-0.087, -0.059, 0], + "ti": [0.089, 0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 57, + "s": [401.947, 251.973, 0], + "to": [-0.089, -0.038, 0], + "ti": [0.091, 0.018, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 58, + "s": [401.676, 251.89, 0], + "to": [-0.091, -0.018, 0], + "ti": [0.046, 0.004, 0] + }, + { "t": 59, "s": [401.399, 251.868, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.884, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 10, + "s": [150.023, 84.302, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.718, 0.778, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.295, -0.001, 0] }, + "t": 11, + "s": [115.536, 94.772, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.873, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.118, 0.133, 0] }, + "t": 12, + "s": [101.947, 84.391, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.035, 1.291, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.243, 0.465, 0] }, + "t": 13, + "s": [69.48, 67.085, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.989, 0.813, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, 0.065, 0] }, + "t": 14, + "s": [52.556, 63.303, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.856, 0.84, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.012, 0.15, 0] }, + "t": 15, + "s": [76.674, 80.31, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.805, 0.955, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.197, 0.174, 0] }, + "t": 16, + "s": [55.698, 101.414, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.152, 1.045, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.145, -0.098, 0] }, + "t": 17, + "s": [40.385, 120.878, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 1.219, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 0.029, 0] }, + "t": 18, + "s": [19.82, 111.938, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.016, 0.871, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.102, 0.06, 0] }, + "t": 19, + "s": [78.004, 125.754, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.949, 0.912, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.013, 0.234, 0] }, + "t": 20, + "s": [51.803, 75.606, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.062, 0.955, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.135, 1.443, 0] }, + "t": 21, + "s": [82.948, 47.853, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, -0.218, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.035, -0.097, 0] }, + "t": 22, + "s": [71.038, 46.152, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.784, 0.414, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.302, 0.089, 0] }, + "t": 23, + "s": [91.761, 46.937, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 0.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.136, 0.097, 0] }, + "t": 24, + "s": [99.655, 57.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.883, 0.788, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.133, -3.004, 0] }, + "t": 25, + "s": [112.222, 122.076, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [4.25, 0.248, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.289, 0.137, 0] }, + "t": 26, + "s": [111.361, 120.336, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.223, 0.834, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, 0.094, 0] }, + "t": 27, + "s": [111.012, 117.65, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 1.003, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, 0.167, 0] }, + "t": 28, + "s": [124.959, 96.101, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.488, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.648, 0.003, 0] }, + "t": 29, + "s": [73.624, 74.745, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.933, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, -0.053, 0] }, + "t": 30, + "s": [79.474, 96.927, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.44, 0.823, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.337, -0.086, 0] }, + "t": 31, + "s": [39.363, 83.33, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.955, 0.354, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.098, 0.158, 0] }, + "t": 32, + "s": [47.32, 90.031, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.968, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.099, 0.096, 0] }, + "t": 33, + "s": [92.847, 97.529, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.719, 0.771, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.051, -0.044, 0] }, + "t": 34, + "s": [72.017, 148.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.036, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.118, 0.131, 0] }, + "t": 35, + "s": [84.935, 114.918, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.917, 1.042, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, -0.658, 0] }, + "t": 36, + "s": [115.633, 56.769, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-3.33, 1.406, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-14.6, 0.028, 0] }, + "t": 37, + "s": [71.733, 63.301, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.842, 0.897, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.085, 0.069, 0] }, + "t": 38, + "s": [71.982, 53.5, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.296, 1.262, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.177, 0.435, 0] }, + "t": 39, + "s": [84.68, 111.004, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.873, 0.865, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.065, 0.063, 0] }, + "t": 40, + "s": [96.026, 124.642, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.082, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.241, 0.218, 0] }, + "t": 41, + "s": [44.359, 68.117, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, 1.947, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.041, 1.94, 0] }, + "t": 42, + "s": [16.99, 33.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.848, 0.777, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.028, 0.077, 0] }, + "t": 43, + "s": [71.31, 31.618, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 1.037, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.185, 0.133, 0] }, + "t": 44, + "s": [30.563, 51.009, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.958, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.066, 0.026, 0] }, + "t": 45, + "s": [-2.843, 83.398, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.188, 0.937, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.084, 0.448, 0] }, + "t": 46, + "s": [15.771, 36.624, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, -0.025, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, -0.252, 0] }, + "t": 47, + "s": [6.523, 25.933, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.308, 1.025, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.823, 0.091, 0] }, + "t": 48, + "s": [36.606, 28.591, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.857, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.066, 0.019, 0] }, + "t": 49, + "s": [33.84, 58.624, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.022, 0.96, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.199, 0.224, 0] }, + "t": 50, + "s": [46.823, 19.638, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.667, 0.763, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.018, -0.078, 0] }, + "t": 51, + "s": [56.147, -3.469, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.868, 0.839, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.111, 0.129, 0] }, + "t": 52, + "s": [44.338, 8.441, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.071, 1.087, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.227, 0.172, 0] }, + "t": 53, + "s": [8.892, 30.372, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.016, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.043, 0] }, + "t": 54, + "s": [-11.629, 50.878, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.012, 0.823, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.013, -0.049, 0] }, + "t": 55, + "s": [26.385, 8.842, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 1.146, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.011, 0.158, 0] }, + "t": 56, + "s": [-18.969, 35.342, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.128, 0.932, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.244, 0.053, 0] }, + "t": 57, + "s": [33.051, 65.059, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, -0.359, 0] }, + "t": 58, + "s": [19.792, -16.798, 100] + }, + { "t": 59, "s": [53.472, -1.378, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.791173718022, 0.019608000213, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 10, + "op": 60, + "st": 10, + "bm": 0 + }, + { + "ddd": 0, + "ind": 40, + "ty": 4, + "nm": "Shape Layer 12", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 16, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 38, + "s": [100] + }, + { "t": 54, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.583 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 11, + "s": [278.886, 263.108, 0], + "to": [-0.396, 0.093, 0], + "ti": [2.046, 0.295, 0] + }, + { + "i": { "x": 0.833, "y": 0.762 }, + "o": { "x": 0.167, "y": 0.104 }, + "t": 12, + "s": [276.51, 263.668, 0], + "to": [-2.046, -0.295, 0], + "ti": [4.357, 2.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.128 }, + "t": 13, + "s": [266.607, 261.339, 0], + "to": [-4.357, -2.028, 0], + "ti": [5.491, 3.808, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 14, + "s": [250.369, 251.499, 0], + "to": [-5.491, -3.808, 0], + "ti": [5.141, 4.15, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 15, + "s": [233.659, 238.49, 0], + "to": [-5.141, -4.15, 0], + "ti": [4.303, 3.645, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 16, + "s": [219.52, 226.601, 0], + "to": [-4.303, -3.645, 0], + "ti": [3.589, 3.053, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 17, + "s": [207.84, 216.618, 0], + "to": [-3.589, -3.053, 0], + "ti": [3.064, 2.559, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 18, + "s": [197.984, 208.283, 0], + "to": [-3.064, -2.559, 0], + "ti": [2.675, 2.164, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 19, + "s": [189.458, 201.262, 0], + "to": [-2.675, -2.164, 0], + "ti": [2.381, 1.843, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 20, + "s": [181.933, 195.3, 0], + "to": [-2.381, -1.843, 0], + "ti": [2.153, 1.575, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 21, + "s": [175.17, 190.206, 0], + "to": [-2.153, -1.575, 0], + "ti": [1.971, 1.344, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [169.014, 185.852, 0], + "to": [-1.971, -1.344, 0], + "ti": [1.824, 1.14, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [163.346, 182.143, 0], + "to": [-1.824, -1.14, 0], + "ti": [1.703, 0.954, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [158.073, 179.012, 0], + "to": [-1.703, -0.954, 0], + "ti": [1.601, 0.778, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [153.127, 176.419, 0], + "to": [-1.601, -0.778, 0], + "ti": [1.512, 0.605, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [148.464, 174.344, 0], + "to": [-1.512, -0.605, 0], + "ti": [1.427, 0.431, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 27, + "s": [144.054, 172.787, 0], + "to": [-1.427, -0.431, 0], + "ti": [1.341, 0.252, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [139.899, 171.759, 0], + "to": [-1.341, -0.252, 0], + "ti": [1.243, 0.072, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [136.007, 171.274, 0], + "to": [-1.243, -0.072, 0], + "ti": [1.123, -0.099, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 30, + "s": [132.443, 171.328, 0], + "to": [-1.123, 0.099, 0], + "ti": [0.987, -0.242, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 31, + "s": [129.266, 171.868, 0], + "to": [-0.987, 0.242, 0], + "ti": [0.844, -0.342, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 32, + "s": [126.522, 172.779, 0], + "to": [-0.844, 0.342, 0], + "ti": [0.71, -0.397, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 33, + "s": [124.202, 173.921, 0], + "to": [-0.71, 0.397, 0], + "ti": [0.594, -0.415, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 34, + "s": [122.26, 175.163, 0], + "to": [-0.594, 0.415, 0], + "ti": [0.499, -0.407, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 35, + "s": [120.635, 176.409, 0], + "to": [-0.499, 0.407, 0], + "ti": [0.424, -0.386, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 36, + "s": [119.263, 177.604, 0], + "to": [-0.424, 0.386, 0], + "ti": [0.362, -0.359, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 37, + "s": [118.093, 178.724, 0], + "to": [-0.362, 0.359, 0], + "ti": [0.312, -0.329, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 38, + "s": [117.089, 179.757, 0], + "to": [-0.312, 0.329, 0], + "ti": [0.271, -0.298, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 39, + "s": [116.22, 180.697, 0], + "to": [-0.271, 0.298, 0], + "ti": [0.237, -0.267, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 40, + "s": [115.461, 181.543, 0], + "to": [-0.237, 0.267, 0], + "ti": [0.208, -0.237, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 41, + "s": [114.796, 182.298, 0], + "to": [-0.208, 0.237, 0], + "ti": [0.183, -0.208, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 42, + "s": [114.21, 182.964, 0], + "to": [-0.183, 0.208, 0], + "ti": [0.161, -0.181, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 43, + "s": [113.696, 183.547, 0], + "to": [-0.161, 0.181, 0], + "ti": [0.141, -0.155, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 44, + "s": [113.244, 184.051, 0], + "to": [-0.141, 0.155, 0], + "ti": [0.122, -0.131, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 45, + "s": [112.85, 184.48, 0], + "to": [-0.122, 0.131, 0], + "ti": [0.105, -0.107, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 46, + "s": [112.51, 184.835, 0], + "to": [-0.105, 0.107, 0], + "ti": [0.089, -0.086, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 47, + "s": [112.219, 185.124, 0], + "to": [-0.089, 0.086, 0], + "ti": [0.074, -0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.855 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 48, + "s": [111.973, 185.351, 0], + "to": [-0.074, 0.066, 0], + "ti": [0.06, -0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.861 }, + "o": { "x": 0.167, "y": 0.197 }, + "t": 49, + "s": [111.772, 185.518, 0], + "to": [-0.06, 0.046, 0], + "ti": [0.046, -0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.855 }, + "o": { "x": 0.167, "y": 0.208 }, + "t": 50, + "s": [111.612, 185.626, 0], + "to": [-0.046, 0.026, 0], + "ti": [0.035, -0.013, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.196 }, + "t": 51, + "s": [111.493, 185.674, 0], + "to": [-0.035, 0.013, 0], + "ti": [0.027, -0.015, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 52, + "s": [111.404, 185.706, 0], + "to": [-0.027, 0.015, 0], + "ti": [0.021, -0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 53, + "s": [111.333, 185.761, 0], + "to": [-0.021, 0.022, 0], + "ti": [0.015, -0.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 54, + "s": [111.28, 185.837, 0], + "to": [-0.015, 0.028, 0], + "ti": [0.01, -0.033, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 55, + "s": [111.243, 185.929, 0], + "to": [-0.01, 0.033, 0], + "ti": [0.006, -0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 56, + "s": [111.219, 186.034, 0], + "to": [-0.006, 0.036, 0], + "ti": [0.003, -0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 57, + "s": [111.207, 186.148, 0], + "to": [-0.003, 0.038, 0], + "ti": [0, -0.039, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 58, + "s": [111.203, 186.265, 0], + "to": [0, 0.039, 0], + "ti": [0, -0.019, 0] + }, + { "t": 59, "s": [111.205, 186.381, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 0.956, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 11, + "s": [70.371, 73.099, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.011, 0.757, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.387, -0.094, 0] }, + "t": 12, + "s": [81.451, 49.764, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.535, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.009, 0.127, 0] }, + "t": 13, + "s": [84.489, 60.747, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.814, 1.157, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.102, -0.112, 0] }, + "t": 14, + "s": [81.065, 81.842, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.818, 1.017, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.151, 0.054, 0] }, + "t": 15, + "s": [65.388, 72.828, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.16, 0.963, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.154, 0.014, 0] }, + "t": 16, + "s": [46.083, 98.818, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.958, 0.997, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, -0.066, 0] }, + "t": 17, + "s": [23.236, 67.65, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.086, -0.003, 0] }, + "t": 18, + "s": [90.073, 84.988, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.171, 1.805, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.806, 1.29, 0] }, + "t": 19, + "s": [57.21, 68.22, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 1.029, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.09, 0.076, 0] }, + "t": 20, + "s": [60.29, 67.062, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.989, 0.774, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.06, 0.022, 0] }, + "t": 21, + "s": [100.479, 79.398, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.87, 1.114, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.013, 0.132, 0] }, + "t": 22, + "s": [77.165, 62.735, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.823, 0.904, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.233, 0.048, 0] }, + "t": 23, + "s": [97.376, 34.245, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.123, 1.029, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.158, 0.644, 0] }, + "t": 24, + "s": [108.611, 101.546, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 0.834, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.05, 0.021, 0] }, + "t": 25, + "s": [121.197, 111.543, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.983, 1.031, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.031, 0.167, 0] }, + "t": 26, + "s": [90.035, 98.098, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.835, 0.878, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.021, 0.023, 0] }, + "t": 27, + "s": [112.765, 84.756, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.751, 1.24, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.168, 0.262, 0] }, + "t": 28, + "s": [94.608, 103.076, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.906, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.125, 0.062, 0] }, + "t": 29, + "s": [76.78, 111.632, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.547, -0.27, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.74, 2.198, 0] }, + "t": 30, + "s": [41.278, 78.465, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 1.188, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.072, 0.089, 0] }, + "t": 31, + "s": [36.77, 77.159, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.441, 0.893, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.649, 0.058, 0] }, + "t": 32, + "s": [70.888, 58.554, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.52, 1.21, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.098, 0.377, 0] }, + "t": 33, + "s": [71.996, 119.193, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.101, 0.06, 0] }, + "t": 34, + "s": [78.321, 136.39, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.766, 1.004, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.031, -0.115, 0] }, + "t": 35, + "s": [108.467, 75.868, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.959, 0.964, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.129, 0.004, 0] }, + "t": 36, + "s": [86.503, 101.319, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.825, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.079, -0.062, 0] }, + "t": 37, + "s": [46.776, 74.608, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.98, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, 0.159, 0] }, + "t": 38, + "s": [67.187, 89.94, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.699, 3.529, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.027, 1.019, 0] }, + "t": 39, + "s": [85.904, 106.857, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 0.895, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, 0.081, 0] }, + "t": 40, + "s": [71.727, 108.364, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.929, 0.834, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.984, 0.401, 0] }, + "t": 41, + "s": [34.691, 61.105, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.084, 1.299, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.08, 0.168, 0] }, + "t": 42, + "s": [33.627, 48.718, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.001, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.042, 0.065, 0] }, + "t": 43, + "s": [59.325, 36.458, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 0.928, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.001, -0.001, 0] }, + "t": 44, + "s": [7.81, 92.753, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.889, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.168, -0.538, 0] }, + "t": 45, + "s": [59.941, 37.215, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.33, 1.334, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.335, -0.083, 0] }, + "t": 46, + "s": [42.632, 44.663, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.973, 0.992, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, 0.067, 0] }, + "t": 47, + "s": [36.89, 40.928, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.915, 0.649, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.04, -0.009, 0] }, + "t": 48, + "s": [65.36, 59.633, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.366, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [3.347, 0.109, 0] }, + "t": 49, + "s": [46.071, 42.784, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.284, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, -0.023, 0] }, + "t": 50, + "s": [45.578, -11.282, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.976, -5.807, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, 7.457, 0] }, + "t": 51, + "s": [42.321, 31.087, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.91, 0.98, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.033, 0.084, 0] }, + "t": 52, + "s": [17.582, 31.566, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [4.784, 0.838, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.171, -0.026, 0] }, + "t": 53, + "s": [35.243, 70.197, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.95, 1.095, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.082, 0.171, 0] }, + "t": 54, + "s": [36.597, 40.776, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.762, 1.02, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.123, 0.044, 0] }, + "t": 55, + "s": [-26.212, 12.89, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.889, 0.94, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.128, 0.016, 0] }, + "t": 56, + "s": [-0.792, 72.669, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.804, 0.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.335, -0.211, 0] }, + "t": 57, + "s": [46.469, -1.813, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.145, 1.163, 0] }, + "t": 58, + "s": [62.111, 19.267, 100] + }, + { "t": 59, "s": [83.28, 20.895, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.791173718022, 0.019608000213, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 11, + "op": 60, + "st": 11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 41, + "ty": 4, + "nm": "Shape Layer 11", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 5, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 32, + "s": [100] + }, + { "t": 48, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.595 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 5, + "s": [280.895, 263.305, 0], + "to": [-0.567, 0.175, 0], + "ti": [2.713, -0.992, 0] + }, + { + "i": { "x": 0.833, "y": 0.764 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 6, + "s": [277.49, 264.357, 0], + "to": [-2.713, 0.992, 0], + "ti": [6.007, -2.449, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 7, + "s": [264.618, 269.257, 0], + "to": [-6.007, 2.449, 0], + "ti": [8.091, -3.591, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 8, + "s": [241.447, 279.054, 0], + "to": [-8.091, 3.591, 0], + "ti": [7.873, -3.782, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 9, + "s": [216.07, 290.801, 0], + "to": [-7.873, 3.782, 0], + "ti": [6.648, -3.432, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 10, + "s": [194.207, 301.746, 0], + "to": [-6.648, 3.432, 0], + "ti": [5.503, -3.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 11, + "s": [176.185, 311.391, 0], + "to": [-5.503, 3.025, 0], + "ti": [4.615, -2.683, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 12, + "s": [161.19, 319.898, 0], + "to": [-4.615, 2.683, 0], + "ti": [3.935, -2.407, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 13, + "s": [148.493, 327.489, 0], + "to": [-3.935, 2.407, 0], + "ti": [3.399, -2.181, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 14, + "s": [137.583, 334.338, 0], + "to": [-3.399, 2.181, 0], + "ti": [2.966, -1.993, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 15, + "s": [128.098, 340.575, 0], + "to": [-2.966, 1.993, 0], + "ti": [2.607, -1.832, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [119.785, 346.294, 0], + "to": [-2.607, 1.832, 0], + "ti": [2.302, -1.693, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [112.455, 351.568, 0], + "to": [-2.302, 1.693, 0], + "ti": [2.037, -1.57, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 18, + "s": [105.973, 356.452, 0], + "to": [-2.037, 1.57, 0], + "ti": [1.803, -1.461, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [100.233, 360.99, 0], + "to": [-1.803, 1.461, 0], + "ti": [1.593, -1.362, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [95.155, 365.216, 0], + "to": [-1.593, 1.362, 0], + "ti": [1.401, -1.271, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [90.677, 369.16, 0], + "to": [-1.401, 1.271, 0], + "ti": [1.224, -1.188, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [86.752, 372.844, 0], + "to": [-1.224, 1.188, 0], + "ti": [1.07, -1.108, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [83.332, 376.285, 0], + "to": [-1.07, 1.108, 0], + "ti": [0.937, -1.031, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [80.332, 379.49, 0], + "to": [-0.937, 1.031, 0], + "ti": [0.818, -0.958, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 25, + "s": [77.708, 382.471, 0], + "to": [-0.818, 0.958, 0], + "ti": [0.71, -0.889, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 26, + "s": [75.425, 385.239, 0], + "to": [-0.71, 0.889, 0], + "ti": [0.612, -0.822, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 27, + "s": [73.45, 387.804, 0], + "to": [-0.612, 0.822, 0], + "ti": [0.523, -0.758, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 28, + "s": [71.754, 390.173, 0], + "to": [-0.523, 0.758, 0], + "ti": [0.442, -0.696, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 29, + "s": [70.313, 392.354, 0], + "to": [-0.442, 0.696, 0], + "ti": [0.369, -0.637, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 30, + "s": [69.102, 394.352, 0], + "to": [-0.369, 0.637, 0], + "ti": [0.304, -0.579, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 31, + "s": [68.096, 396.175, 0], + "to": [-0.304, 0.579, 0], + "ti": [0.245, -0.524, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 32, + "s": [67.277, 397.829, 0], + "to": [-0.245, 0.524, 0], + "ti": [0.193, -0.471, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 33, + "s": [66.624, 399.32, 0], + "to": [-0.193, 0.471, 0], + "ti": [0.147, -0.42, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 34, + "s": [66.118, 400.656, 0], + "to": [-0.147, 0.42, 0], + "ti": [0.105, -0.37, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 35, + "s": [65.744, 401.84, 0], + "to": [-0.105, 0.37, 0], + "ti": [0.069, -0.322, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 36, + "s": [65.487, 402.877, 0], + "to": [-0.069, 0.322, 0], + "ti": [0.037, -0.276, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 37, + "s": [65.332, 403.773, 0], + "to": [-0.037, 0.276, 0], + "ti": [0.009, -0.231, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 38, + "s": [65.265, 404.532, 0], + "to": [-0.009, 0.231, 0], + "ti": [-0.014, -0.188, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 39, + "s": [65.276, 405.16, 0], + "to": [0.014, 0.188, 0], + "ti": [-0.034, -0.146, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.189 }, + "t": 40, + "s": [65.351, 405.66, 0], + "to": [0.034, 0.146, 0], + "ti": [-0.051, -0.106, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 41, + "s": [65.481, 406.037, 0], + "to": [0.051, 0.106, 0], + "ti": [-0.064, -0.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 42, + "s": [65.655, 406.293, 0], + "to": [0.064, 0.066, 0], + "ti": [-0.074, -0.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 43, + "s": [65.864, 406.433, 0], + "to": [0.074, 0.028, 0], + "ti": [-0.081, 0.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 44, + "s": [66.098, 406.459, 0], + "to": [0.081, -0.01, 0], + "ti": [-0.083, 0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 45, + "s": [66.349, 406.373, 0], + "to": [0.083, -0.038, 0], + "ti": [-0.078, 0.048, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 46, + "s": [66.596, 406.231, 0], + "to": [0.078, -0.048, 0], + "ti": [-0.069, 0.051, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 47, + "s": [66.819, 406.083, 0], + "to": [0.069, -0.051, 0], + "ti": [-0.057, 0.054, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 48, + "s": [67.01, 405.928, 0], + "to": [0.057, -0.054, 0], + "ti": [-0.042, 0.058, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 49, + "s": [67.16, 405.761, 0], + "to": [0.042, -0.058, 0], + "ti": [-0.023, 0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 50, + "s": [67.259, 405.58, 0], + "to": [0.023, -0.063, 0], + "ti": [-0.001, 0.07, 0] + }, + { + "i": { "x": 0.833, "y": 0.82 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 51, + "s": [67.298, 405.38, 0], + "to": [0.001, -0.07, 0], + "ti": [0.023, 0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.155 }, + "t": 52, + "s": [67.266, 405.158, 0], + "to": [-0.023, -0.076, 0], + "ti": [0.046, 0.073, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 53, + "s": [67.158, 404.922, 0], + "to": [-0.046, -0.073, 0], + "ti": [0.062, 0.06, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 54, + "s": [66.993, 404.72, 0], + "to": [-0.062, -0.06, 0], + "ti": [0.076, 0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 55, + "s": [66.783, 404.561, 0], + "to": [-0.076, -0.046, 0], + "ti": [0.086, 0.031, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 56, + "s": [66.539, 404.446, 0], + "to": [-0.086, -0.031, 0], + "ti": [0.093, 0.016, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 57, + "s": [66.269, 404.376, 0], + "to": [-0.093, -0.016, 0], + "ti": [0.097, 0, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 58, + "s": [65.982, 404.352, 0], + "to": [-0.097, 0, 0], + "ti": [0.049, -0.004, 0] + }, + { "t": 59, "s": [65.686, 404.375, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 5, + "s": [49.45, 148.28, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.038, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.246, 0.447, 0] }, + "t": 6, + "s": [96.233, 59.296, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.026, 0.012, 0] }, + "t": 7, + "s": [84.39, 38.927, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.66, 0.535, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.391, -0.32, 0] }, + "t": 8, + "s": [101.568, 62.764, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, 0.102, 0] }, + "t": 9, + "s": [106.222, 57.834, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.162, 0.853, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.472, -0.001, 0] }, + "t": 10, + "s": [64.691, 35.274, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.955, 0.795, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.093, 0.193, 0] }, + "t": 11, + "s": [70.923, 57.653, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.827, 1.022, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.098, 0.141, 0] }, + "t": 12, + "s": [127.324, 74.727, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.161, 0.018, 0] }, + "t": 13, + "s": [101.458, 99.601, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.386, 1.222, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.314, -0.197, 0] }, + "t": 14, + "s": [73.693, 68.044, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.064, 0.905, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 0.061, 0] }, + "t": 15, + "s": [79.522, 77.427, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 1.413, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.036, 0.681, 0] }, + "t": 16, + "s": [46.671, 43.016, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.358, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.543, 0.069, 0] }, + "t": 17, + "s": [104.84, 38.219, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.006, 1.25, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, -0.2, 0] }, + "t": 18, + "s": [97.095, 66.774, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.896, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, 0.063, 0] }, + "t": 19, + "s": [45.158, 58.378, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 1.295, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.142, 0.42, 0] }, + "t": 20, + "s": [100.992, 91.978, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.782, 0.93, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.105, 0.065, 0] }, + "t": 21, + "s": [80.364, 100.301, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.813, 0.641, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, -0.451, 0] }, + "t": 22, + "s": [89.494, 62.471, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.187, 0.991, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.15, 0.109, 0] }, + "t": 23, + "s": [104.25, 68.373, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 0.748, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, -0.01, 0] }, + "t": 24, + "s": [122.573, 87.899, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.546, 1.004, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.303, 0.124, 0] }, + "t": 25, + "s": [63.056, 70.386, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 0.876, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.088, 0.004, 0] }, + "t": 26, + "s": [66.633, 34.869, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.782, 0.805, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.233, 0.254, 0] }, + "t": 27, + "s": [129.403, 72.011, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.806, 1.026, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, 0.145, 0] }, + "t": 28, + "s": [112.863, 90.111, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 0.817, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.146, 0.02, 0] }, + "t": 29, + "s": [86.228, 114.396, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 0.937, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.514, 0.153, 0] }, + "t": 30, + "s": [50.891, 82.427, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.248, 0.388, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, -0.251, 0] }, + "t": 31, + "s": [55.82, 44.045, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.895, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, 0.096, 0] }, + "t": 32, + "s": [49.632, 53.61, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.992, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.404, -0.058, 0] }, + "t": 33, + "s": [74.255, 114.253, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.123, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.009, 1.243, 0] }, + "t": 34, + "s": [80.651, 78.395, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.169, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, -0.398, 0] }, + "t": 35, + "s": [74.861, 75.817, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.802, 1.723, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.176, 0.093, 0] }, + "t": 36, + "s": [19.702, 76.263, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 1.043, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.144, 0.075, 0] }, + "t": 37, + "s": [37.393, 80.265, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.507, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.243, 0.028, 0] }, + "t": 38, + "s": [61.705, 41.546, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.85, 0.881, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.1, -0.133, 0] }, + "t": 39, + "s": [55.488, 100.178, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.039, 0.614, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.187, 0.279, 0] }, + "t": 40, + "s": [24.961, 77.623, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.03, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.026, 0.106, 0] }, + "t": 41, + "s": [0.375, 68.025, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.01, 1.132, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.022, -0.04, 0] }, + "t": 42, + "s": [36.365, 33.155, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.865, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.009, 0.051, 0] }, + "t": 43, + "s": [-12.521, 56.708, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.071, 0.909, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.219, -0.051, 0] }, + "t": 44, + "s": [42.47, -4.293, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.953, 1.38, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.941, 0] }, + "t": 45, + "s": [76.363, 33.422, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.108, 0.068, 0] }, + "t": 46, + "s": [13.419, 37.087, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 1.072, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.028, -0.014, 0] }, + "t": 47, + "s": [40.835, 16.71, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.911, 1.007, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.176, 0.039, 0] }, + "t": 48, + "s": [20.376, 34.131, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.32, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.367, 0.007, 0] }, + "t": 49, + "s": [26.948, 1.687, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.176, 0.438, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.08, 0.755, 0] }, + "t": 50, + "s": [27.375, 36.914, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 0.868, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.057, 0.098, 0] }, + "t": 51, + "s": [15.071, 41.282, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.862, 1.428, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.019, 0.226, 0] }, + "t": 52, + "s": [53.354, 66.388, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.873, 0.951, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.21, 0.07, 0] }, + "t": 53, + "s": [22.228, 81.077, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.145, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.242, -0.12, 0] }, + "t": 54, + "s": [1.727, -9.051, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.874, 0.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.053, -0.044, 0] }, + "t": 55, + "s": [-9.032, 27.824, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.791, -3.351, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.245, -3.045, 0] }, + "t": 56, + "s": [20.502, 3.731, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 0.93, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.139, 0.085, 0] }, + "t": 57, + "s": [35.73, 4.373, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, -0.444, 0] }, + "t": 58, + "s": [58.616, 37.243, 100] + }, + { "t": 59, "s": [30.021, 32.047, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 5, + "op": 60, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 42, + "ty": 4, + "nm": "Shape Layer 10", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 8, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 35, + "s": [100] + }, + { "t": 51, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.609 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [272.114, 255.071, 0], + "to": [-0.266, 0.053, 0], + "ti": [1.216, -0.382, 0] + }, + { + "i": { "x": 0.833, "y": 0.765 }, + "o": { "x": 0.167, "y": 0.106 }, + "t": 9, + "s": [270.517, 255.387, 0], + "to": [-1.216, 0.382, 0], + "ti": [2.644, -1.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 10, + "s": [264.819, 257.361, 0], + "to": [-2.644, 1.017, 0], + "ti": [3.502, -1.605, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 11, + "s": [254.654, 261.49, 0], + "to": [-3.502, 1.605, 0], + "ti": [3.128, -2.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 12, + "s": [243.809, 266.989, 0], + "to": [-3.128, 2.062, 0], + "ti": [0.929, -2.4, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.191 }, + "t": 13, + "s": [235.889, 273.86, 0], + "to": [-0.929, 2.4, 0], + "ti": [-1.493, -1.834, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 14, + "s": [238.235, 281.389, 0], + "to": [1.493, 1.834, 0], + "ti": [-2.114, -0.944, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 15, + "s": [244.846, 284.864, 0], + "to": [2.114, 0.944, 0], + "ti": [-1.909, -0.642, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 16, + "s": [250.917, 287.051, 0], + "to": [1.909, 0.642, 0], + "ti": [-1.697, -0.51, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 17, + "s": [256.301, 288.717, 0], + "to": [1.697, 0.51, 0], + "ti": [-1.516, -0.438, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 18, + "s": [261.1, 290.112, 0], + "to": [1.516, 0.438, 0], + "ti": [-1.362, -0.392, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [265.397, 291.343, 0], + "to": [1.362, 0.392, 0], + "ti": [-1.229, -0.362, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [269.269, 292.467, 0], + "to": [1.229, 0.362, 0], + "ti": [-1.114, -0.341, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [272.774, 293.517, 0], + "to": [1.114, 0.341, 0], + "ti": [-1.012, -0.326, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [275.955, 294.515, 0], + "to": [1.012, 0.326, 0], + "ti": [-0.921, -0.314, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [278.847, 295.472, 0], + "to": [0.921, 0.314, 0], + "ti": [-0.839, -0.305, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [281.482, 296.4, 0], + "to": [0.839, 0.305, 0], + "ti": [-0.762, -0.298, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [283.879, 297.304, 0], + "to": [0.762, 0.298, 0], + "ti": [-0.69, -0.293, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [286.053, 298.19, 0], + "to": [0.69, 0.293, 0], + "ti": [-0.621, -0.288, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [288.016, 299.06, 0], + "to": [0.621, 0.288, 0], + "ti": [-0.554, -0.284, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [289.778, 299.918, 0], + "to": [0.554, 0.284, 0], + "ti": [-0.486, -0.279, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [291.338, 300.763, 0], + "to": [0.486, 0.279, 0], + "ti": [-0.419, -0.273, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 30, + "s": [292.695, 301.592, 0], + "to": [0.419, 0.273, 0], + "ti": [-0.351, -0.266, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 31, + "s": [293.849, 302.402, 0], + "to": [0.351, 0.266, 0], + "ti": [-0.283, -0.258, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 32, + "s": [294.801, 303.189, 0], + "to": [0.283, 0.258, 0], + "ti": [-0.215, -0.245, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 33, + "s": [295.549, 303.949, 0], + "to": [0.215, 0.245, 0], + "ti": [-0.147, -0.225, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 34, + "s": [296.09, 304.662, 0], + "to": [0.147, 0.225, 0], + "ti": [-0.082, -0.198, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 35, + "s": [296.429, 305.301, 0], + "to": [0.082, 0.198, 0], + "ti": [-0.024, -0.164, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.191 }, + "t": 36, + "s": [296.583, 305.847, 0], + "to": [0.024, 0.164, 0], + "ti": [0.026, -0.131, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 37, + "s": [296.574, 306.285, 0], + "to": [-0.026, 0.131, 0], + "ti": [0.067, -0.108, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 38, + "s": [296.425, 306.636, 0], + "to": [-0.067, 0.108, 0], + "ti": [0.097, -0.091, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 39, + "s": [296.17, 306.934, 0], + "to": [-0.097, 0.091, 0], + "ti": [0.117, -0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 40, + "s": [295.842, 307.183, 0], + "to": [-0.117, 0.076, 0], + "ti": [0.129, -0.065, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 41, + "s": [295.468, 307.393, 0], + "to": [-0.129, 0.065, 0], + "ti": [0.134, -0.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 42, + "s": [295.071, 307.574, 0], + "to": [-0.134, 0.057, 0], + "ti": [0.133, -0.051, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 43, + "s": [294.667, 307.733, 0], + "to": [-0.133, 0.051, 0], + "ti": [0.128, -0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 44, + "s": [294.272, 307.878, 0], + "to": [-0.128, 0.046, 0], + "ti": [0.12, -0.044, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 45, + "s": [293.898, 308.012, 0], + "to": [-0.12, 0.044, 0], + "ti": [0.108, -0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 46, + "s": [293.554, 308.14, 0], + "to": [-0.108, 0.042, 0], + "ti": [0.094, -0.041, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 47, + "s": [293.249, 308.264, 0], + "to": [-0.094, 0.041, 0], + "ti": [0.08, -0.044, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 48, + "s": [292.988, 308.385, 0], + "to": [-0.08, 0.044, 0], + "ti": [0.068, -0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 49, + "s": [292.767, 308.528, 0], + "to": [-0.068, 0.055, 0], + "ti": [0.056, -0.069, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 50, + "s": [292.579, 308.714, 0], + "to": [-0.056, 0.069, 0], + "ti": [0.044, -0.082, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 51, + "s": [292.428, 308.941, 0], + "to": [-0.044, 0.082, 0], + "ti": [0.03, -0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 52, + "s": [292.318, 309.205, 0], + "to": [-0.03, 0.094, 0], + "ti": [0.016, -0.105, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 53, + "s": [292.249, 309.504, 0], + "to": [-0.016, 0.105, 0], + "ti": [0.001, -0.114, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 54, + "s": [292.223, 309.833, 0], + "to": [-0.001, 0.114, 0], + "ti": [-0.013, -0.122, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 55, + "s": [292.242, 310.189, 0], + "to": [0.013, 0.122, 0], + "ti": [-0.028, -0.128, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 56, + "s": [292.304, 310.564, 0], + "to": [0.028, 0.128, 0], + "ti": [-0.042, -0.131, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 57, + "s": [292.408, 310.955, 0], + "to": [0.042, 0.131, 0], + "ti": [-0.055, -0.133, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 58, + "s": [292.554, 311.353, 0], + "to": [0.055, 0.133, 0], + "ti": [-0.031, -0.067, 0] + }, + { "t": 59, "s": [292.738, 311.753, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.866, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 8, + "s": [127.438, 90.591, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.119, 0.935, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.22, -0.014, 0] }, + "t": 9, + "s": [90.096, 28.016, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 1.126, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.049, -0.3, 0] }, + "t": 10, + "s": [67.312, 81.384, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.746, 0.942, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.141, 0.05, 0] }, + "t": 11, + "s": [122.538, 69.77, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.94, 1.165, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.124, -0.191, 0] }, + "t": 12, + "s": [102.02, 98.906, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.968, 1.084, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.21, 0.055, 0] }, + "t": 13, + "s": [60.035, 90.043, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.429, 0.887, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.051, 0.042, 0] }, + "t": 14, + "s": [71.968, 116.451, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.886, 0.984, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, 0.318, 0] }, + "t": 15, + "s": [64.586, 63.443, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.12, 0.842, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.307, -0.02, 0] }, + "t": 16, + "s": [109.991, 44.631, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.887, 0.933, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.049, 0.176, 0] }, + "t": 17, + "s": [126.937, 59.824, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.971, 1.735, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.316, -0.347, 0] }, + "t": 18, + "s": [85.604, 73.442, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.831, 0.945, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.045, 0.075, 0] }, + "t": 19, + "s": [70.771, 70.802, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.913, 0.639, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.164, -0.162, 0] }, + "t": 20, + "s": [80.389, 96.73, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.179, 0.905, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.79, 0.108, 0] }, + "t": 21, + "s": [90.289, 87.923, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.589, 1.199, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.093, 0.673, 0] }, + "t": 22, + "s": [90.772, 58.569, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.878, 1.108, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.073, 0.059, 0] }, + "t": 23, + "s": [95.049, 54.421, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.33, 0.947, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.262, 0.047, 0] }, + "t": 24, + "s": [60.54, 68.48, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.901, 0.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, -0.148, 0] }, + "t": 25, + "s": [44.437, 36.222, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 4.165, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.525, -0.607, 0] }, + "t": 26, + "s": [124.279, 47.844, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-1.352, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.486, 0.081, 0] }, + "t": 27, + "s": [139.353, 46.441, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.883, 2.129, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.086, 1.924, 0] }, + "t": 28, + "s": [137.147, 101.148, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.914, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.29, 0.078, 0] }, + "t": 29, + "s": [77.097, 103.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.16, 2.38, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.222, 2.472, 0] }, + "t": 30, + "s": [52.92, 67.602, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.876, 0.839, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.079, 0] }, + "t": 31, + "s": [38.391, 66.346, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.058, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.255, 0.173, 0] }, + "t": 32, + "s": [80.849, 88.417, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 0.752, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.034, -0.04, 0] }, + "t": 33, + "s": [101.514, 109.026, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.242, 1.058, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.446, 0.126, 0] }, + "t": 34, + "s": [66.389, 95.048, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.892, 1.025, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, 0.034, 0] }, + "t": 35, + "s": [58.31, 67.448, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.044, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.364, 0.019, 0] }, + "t": 36, + "s": [89.867, 114.12, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.587, 0.887, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.029, -0.038, 0] }, + "t": 37, + "s": [99.232, 53.341, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 1.104, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.104, 0.319, 0] }, + "t": 38, + "s": [84.926, 94.953, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.439, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.495, 0.046, 0] }, + "t": 39, + "s": [28.265, 109.679, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.035, 0.952, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, 0.223, 0] }, + "t": 40, + "s": [24.92, 76.564, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 1.618, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, -0.113, 0] }, + "t": 41, + "s": [45.873, 56.751, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.603, 0.985, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.138, 0.073, 0] }, + "t": 42, + "s": [16.102, 65.143, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.028, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.105, -0.019, 0] }, + "t": 43, + "s": [27.313, -5.503, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.923, 1.561, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.021, 1.347, 0] }, + "t": 44, + "s": [69.528, 52.086, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.395, 0.972, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.056, 0.073, 0] }, + "t": 45, + "s": [13.347, 55.885, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 0.96, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, -0.041, 0] }, + "t": 46, + "s": [17.457, 26.517, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.906, 0.989, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, -0.077, 0] }, + "t": 47, + "s": [-6.114, 46.16, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.079, 1.13, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.74, -0.013, 0] }, + "t": 48, + "s": [14.941, 35.961, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.225, 0.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.041, 0.051, 0] }, + "t": 49, + "s": [17.614, 44.753, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.151, -0.369, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, -0.61, 0] }, + "t": 50, + "s": [12.402, 22.217, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 0.089, 0] }, + "t": 51, + "s": [31.658, 24.926, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.879, 0.864, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.115, -0.014, 0] }, + "t": 52, + "s": [-22.38, 66.727, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.835, 0.983, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.269, 0.215, 0] }, + "t": 53, + "s": [0.27, 30.796, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.829, 1.068, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.168, -0.021, 0] }, + "t": 54, + "s": [10.423, 7.981, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.817, 0.983, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.162, 0.038, 0] }, + "t": 55, + "s": [20.367, 26.148, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.012, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.153, -0.021, 0] }, + "t": 56, + "s": [30.864, -6.905, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.986, 1.056, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.011, 0.499, 0] }, + "t": 57, + "s": [43.453, 19.525, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.017, 0.034, 0] }, + "t": 58, + "s": [29.038, 24.824, 100] + }, + { "t": 59, "s": [41.021, 15.933, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.791173718022, 0.019608000213, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 60, + "st": 8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 43, + "ty": 4, + "nm": "Shape Layer 9", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 15, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 37, + "s": [100] + }, + { "t": 53, "s": [0] } + ], + "ix": 11 + }, + "r": { + "a": 0, + "k": 0, + "ix": 10, + "x": "var $bm_rt;\n$bm_rt = $bm_mul(time, 300);" + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.607 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 10, + "s": [279.864, 255.271, 0], + "to": [-0.343, 0.177, 0], + "ti": [1.691, -0.679, 0] + }, + { + "i": { "x": 0.833, "y": 0.764 }, + "o": { "x": 0.167, "y": 0.106 }, + "t": 11, + "s": [277.804, 256.336, 0], + "to": [-1.691, 0.679, 0], + "ti": [3.887, -1.09, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 12, + "s": [269.719, 259.347, 0], + "to": [-3.887, 1.09, 0], + "ti": [3.906, 1.153, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 13, + "s": [254.482, 262.875, 0], + "to": [-3.906, -1.153, 0], + "ti": [0.302, 3.979, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 14, + "s": [246.284, 252.432, 0], + "to": [-0.302, -3.979, 0], + "ti": [-2.124, 4.016, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 15, + "s": [252.67, 238.999, 0], + "to": [2.124, -4.016, 0], + "ti": [-1.967, 3.264, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 16, + "s": [259.026, 228.335, 0], + "to": [1.967, -3.264, 0], + "ti": [-1.669, 2.774, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 17, + "s": [264.471, 219.412, 0], + "to": [1.669, -2.774, 0], + "ti": [-1.398, 2.426, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 18, + "s": [269.041, 211.694, 0], + "to": [1.398, -2.426, 0], + "ti": [-1.168, 2.169, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 19, + "s": [272.862, 204.857, 0], + "to": [1.168, -2.169, 0], + "ti": [-0.974, 1.973, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [276.051, 198.681, 0], + "to": [0.974, -1.973, 0], + "ti": [-0.806, 1.82, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [278.705, 193.017, 0], + "to": [0.806, -1.82, 0], + "ti": [-0.644, 1.685, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [280.888, 187.764, 0], + "to": [0.644, -1.685, 0], + "ti": [-0.482, 1.558, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [282.57, 182.907, 0], + "to": [0.482, -1.558, 0], + "ti": [-0.333, 1.443, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [283.781, 178.414, 0], + "to": [0.333, -1.443, 0], + "ti": [-0.197, 1.336, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [284.566, 174.251, 0], + "to": [0.197, -1.336, 0], + "ti": [-0.074, 1.237, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [284.965, 170.396, 0], + "to": [0.074, -1.237, 0], + "ti": [0.038, 1.14, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 27, + "s": [285.012, 166.831, 0], + "to": [-0.038, -1.14, 0], + "ti": [0.139, 1.044, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [284.739, 163.555, 0], + "to": [-0.139, -1.044, 0], + "ti": [0.228, 0.947, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 29, + "s": [284.178, 160.569, 0], + "to": [-0.228, -0.947, 0], + "ti": [0.304, 0.848, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 30, + "s": [283.368, 157.874, 0], + "to": [-0.304, -0.848, 0], + "ti": [0.363, 0.748, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 31, + "s": [282.355, 155.48, 0], + "to": [-0.363, -0.748, 0], + "ti": [0.405, 0.649, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 32, + "s": [281.189, 153.386, 0], + "to": [-0.405, -0.649, 0], + "ti": [0.428, 0.554, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 33, + "s": [279.927, 151.584, 0], + "to": [-0.428, -0.554, 0], + "ti": [0.433, 0.464, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 34, + "s": [278.623, 150.062, 0], + "to": [-0.433, -0.464, 0], + "ti": [0.424, 0.383, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 35, + "s": [277.326, 148.798, 0], + "to": [-0.424, -0.383, 0], + "ti": [0.403, 0.31, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 36, + "s": [276.078, 147.765, 0], + "to": [-0.403, -0.31, 0], + "ti": [0.372, 0.245, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 37, + "s": [274.911, 146.939, 0], + "to": [-0.372, -0.245, 0], + "ti": [0.335, 0.19, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 38, + "s": [273.847, 146.293, 0], + "to": [-0.335, -0.19, 0], + "ti": [0.294, 0.141, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 39, + "s": [272.9, 145.802, 0], + "to": [-0.294, -0.141, 0], + "ti": [0.25, 0.1, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 40, + "s": [272.082, 145.445, 0], + "to": [-0.25, -0.1, 0], + "ti": [0.205, 0.064, 0] + }, + { + "i": { "x": 0.833, "y": 0.855 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 41, + "s": [271.398, 145.204, 0], + "to": [-0.205, -0.064, 0], + "ti": [0.16, 0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.861 }, + "o": { "x": 0.167, "y": 0.196 }, + "t": 42, + "s": [270.85, 145.06, 0], + "to": [-0.16, -0.034, 0], + "ti": [0.115, 0.009, 0] + }, + { + "i": { "x": 0.833, "y": 0.868 }, + "o": { "x": 0.167, "y": 0.208 }, + "t": 43, + "s": [270.438, 144.999, 0], + "to": [-0.115, -0.009, 0], + "ti": [0.071, -0.011, 0] + }, + { + "i": { "x": 0.833, "y": 0.86 }, + "o": { "x": 0.167, "y": 0.226 }, + "t": 44, + "s": [270.159, 145.005, 0], + "to": [-0.071, 0.011, 0], + "ti": [0.029, -0.027, 0] + }, + { + "i": { "x": 0.833, "y": 0.798 }, + "o": { "x": 0.167, "y": 0.205 }, + "t": 45, + "s": [270.01, 145.067, 0], + "to": [-0.029, 0.027, 0], + "ti": [-0.01, -0.039, 0] + }, + { + "i": { "x": 0.833, "y": 0.789 }, + "o": { "x": 0.167, "y": 0.142 }, + "t": 46, + "s": [269.983, 145.17, 0], + "to": [0.01, 0.039, 0], + "ti": [-0.046, -0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.804 }, + "o": { "x": 0.167, "y": 0.138 }, + "t": 47, + "s": [270.07, 145.3, 0], + "to": [0.046, 0.046, 0], + "ti": [-0.08, -0.05, 0] + }, + { + "i": { "x": 0.833, "y": 0.814 }, + "o": { "x": 0.167, "y": 0.145 }, + "t": 48, + "s": [270.262, 145.447, 0], + "to": [0.08, 0.05, 0], + "ti": [-0.111, -0.049, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.151 }, + "t": 49, + "s": [270.551, 145.599, 0], + "to": [0.111, 0.049, 0], + "ti": [-0.133, -0.043, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 50, + "s": [270.927, 145.744, 0], + "to": [0.133, 0.043, 0], + "ti": [-0.141, -0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 51, + "s": [271.347, 145.854, 0], + "to": [0.141, 0.026, 0], + "ti": [-0.142, -0.004, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 52, + "s": [271.77, 145.903, 0], + "to": [0.142, 0.004, 0], + "ti": [-0.143, 0.021, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 53, + "s": [272.2, 145.876, 0], + "to": [0.143, -0.021, 0], + "ti": [-0.142, 0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 54, + "s": [272.629, 145.78, 0], + "to": [0.142, -0.042, 0], + "ti": [-0.137, 0.061, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 55, + "s": [273.049, 145.622, 0], + "to": [0.137, -0.061, 0], + "ti": [-0.13, 0.077, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 56, + "s": [273.452, 145.412, 0], + "to": [0.13, -0.077, 0], + "ti": [-0.12, 0.091, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 57, + "s": [273.829, 145.157, 0], + "to": [0.12, -0.091, 0], + "ti": [-0.109, 0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 58, + "s": [274.175, 144.866, 0], + "to": [0.109, -0.102, 0], + "ti": [-0.051, 0.054, 0] + }, + { "t": 59, "s": [274.483, 144.545, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.838, 1.875, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 10, + "s": [109.864, 70.089, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.856, 0.69, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.172, 0.076, 0] }, + "t": 11, + "s": [86.733, 68.252, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.028, 0.993, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.199, 0.114, 0] }, + "t": 12, + "s": [64.924, 89.385, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.797, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.021, -0.008, 0] }, + "t": 13, + "s": [49.171, 146.99, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, 0.755, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, 0.509, 0] }, + "t": 14, + "s": [70.147, 94.506, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.944, 1.08, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.941, 0.126, 0] }, + "t": 15, + "s": [100.345, 84.223, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.003, 0.981, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.08, 0.041, 0] }, + "t": 16, + "s": [99.102, 64.322, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.843, 0.917, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.002, -0.024, 0] }, + "t": 17, + "s": [129.334, 103.257, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, -0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.177, -21.258, 0] }, + "t": 18, + "s": [98.181, 73.031, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.969, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.032, 0.087, 0] }, + "t": 19, + "s": [70.521, 73.149, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.819, 0.396, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.048, -0.057, 0] }, + "t": 20, + "s": [90.481, 75.792, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.879, 0.99, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.155, 0.097, 0] }, + "t": 21, + "s": [77.84, 74.224, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.071, 0.857, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.269, -0.012, 0] }, + "t": 22, + "s": [63.067, 64.426, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.698, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.2, 0] }, + "t": 23, + "s": [56.422, 72.999, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.807, 0.455, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, -0.052, 0] }, + "t": 24, + "s": [68.741, 79.126, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.911, 0.955, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.147, 0.098, 0] }, + "t": 25, + "s": [101.082, 75.355, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.698, 0.664, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.265, -0.1, 0] }, + "t": 26, + "s": [143.609, 54.475, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.73, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, 0.111, 0] }, + "t": 27, + "s": [146.608, 63.972, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.888, 1.027, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.121, 0.012, 0] }, + "t": 28, + "s": [118.472, 92.79, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.05, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.324, 0.02, 0] }, + "t": 29, + "s": [55.394, 59.194, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.866, 0.94, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.031, -0.051, 0] }, + "t": 30, + "s": [33.53, 103.661, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.028, 0.632, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.22, -0.21, 0] }, + "t": 31, + "s": [68.551, 76.112, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.9, 1.084, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.021, 0.108, 0] }, + "t": 32, + "s": [89.966, 83.951, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.007, 1.005, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.497, 0.042, 0] }, + "t": 33, + "s": [61.396, 110.752, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.966, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.077, 0.004, 0] }, + "t": 34, + "s": [55.64, 56.936, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.958, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.058, -0.045, 0] }, + "t": 35, + "s": [130.926, 113.733, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.106, 0.944, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.086, -0.085, 0] }, + "t": 36, + "s": [86.439, 76.969, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.866, 0.598, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.047, -0.169, 0] }, + "t": 37, + "s": [108.294, 95.156, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.04, 0.836, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.221, 0.105, 0] }, + "t": 38, + "s": [58.545, 89.141, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.947, 0.959, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, 0.17, 0] }, + "t": 39, + "s": [28.376, 66.139, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.89, 1.228, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.148, -0.079, 0] }, + "t": 40, + "s": [72.983, 43.989, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.128, 1.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.339, 0.061, 0] }, + "t": 41, + "s": [56.935, 55.362, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.199, 0.907, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.05, 0.017, 0] }, + "t": 42, + "s": [51.706, 12.909, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 1.369, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.059, 0.774, 0] }, + "t": 43, + "s": [64.946, 65.932, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.252, 1.001, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.238, 0.068, 0] }, + "t": 44, + "s": [20.13, 72.328, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.97, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.063, 0.001, 0] }, + "t": 45, + "s": [31.738, 37.588, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.893, 1.019, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.046, -0.129, 0] }, + "t": 46, + "s": [-14.966, 72.869, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.07, 1.207, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.373, 0.016, 0] }, + "t": 47, + "s": [15.041, 59.042, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.075, 0.894, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.059, 0] }, + "t": 48, + "s": [23.68, 76.032, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.071, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.039, 0.396, 0] }, + "t": 49, + "s": [7.79, 16.858, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.941, 0.564, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, -0.041, 0] }, + "t": 50, + "s": [37.924, 1.088, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.813, 0.957, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.205, 0.103, 0] }, + "t": 51, + "s": [-17.733, 11.662, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.814, 1.008, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.15, -0.09, 0] }, + "t": 52, + "s": [-1.626, 56.352, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 1.062, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.151, 0.008, 0] }, + "t": 53, + "s": [18.416, 34.888, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.817, 0.918, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.441, 0.035, 0] }, + "t": 54, + "s": [43.027, 58.529, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.877, 3.279, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.153, -7.35, 0] }, + "t": 55, + "s": [48.754, 17.354, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.206, 0.776, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.259, 0.08, 0] }, + "t": 56, + "s": [55.61, 17.816, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.986, 1.061, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.059, 0.133, 0] }, + "t": 57, + "s": [58.864, 4.732, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.017, 0.035, 0] }, + "t": 58, + "s": [47.582, -17.422, 100] + }, + { "t": 59, "s": [56.939, 20.914, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "o": [ + [0, 0], + [0, 0], + [0, 0], + [0, 0] + ], + "v": [ + [0.012, 10.621], + [-5.695, 5.34], + [-2.557, -7.377], + [3.15, -2.096] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.791173718022, 0.019608000213, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-3.421, 4.043], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 10, + "op": 60, + "st": 10, + "bm": 0 + }, + { + "ddd": 0, + "ind": 44, + "ty": 4, + "nm": "Shape Layer 8", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 14, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 36, + "s": [100] + }, + { "t": 52, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.626 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 9, + "s": [278.864, 255.82, 0], + "to": [-0.509, 0.141, 0], + "ti": [2.192, -0.891, 0] + }, + { + "i": { "x": 0.833, "y": 0.768 }, + "o": { "x": 0.167, "y": 0.107 }, + "t": 10, + "s": [275.812, 256.665, 0], + "to": [-2.192, 0.891, 0], + "ti": [4.157, -2.88, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.13 }, + "t": 11, + "s": [265.713, 261.168, 0], + "to": [-4.157, 2.88, 0], + "ti": [3.28, -5.54, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 12, + "s": [250.868, 273.944, 0], + "to": [-3.28, 5.54, 0], + "ti": [-0.211, -6.285, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 13, + "s": [246.03, 294.41, 0], + "to": [0.211, 6.285, 0], + "ti": [-2.493, -4.913, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 14, + "s": [252.134, 311.655, 0], + "to": [2.493, 4.913, 0], + "ti": [-2.968, -3.51, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 15, + "s": [260.991, 323.886, 0], + "to": [2.968, 3.51, 0], + "ti": [-2.895, -2.554, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 16, + "s": [269.941, 332.712, 0], + "to": [2.895, 2.554, 0], + "ti": [-2.702, -1.885, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 17, + "s": [278.362, 339.211, 0], + "to": [2.702, 1.885, 0], + "ti": [-2.495, -1.387, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 18, + "s": [286.152, 344.024, 0], + "to": [2.495, 1.387, 0], + "ti": [-2.299, -0.994, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 19, + "s": [293.332, 347.535, 0], + "to": [2.299, 0.994, 0], + "ti": [-2.119, -0.668, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 20, + "s": [299.949, 349.988, 0], + "to": [2.119, 0.668, 0], + "ti": [-1.954, -0.387, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [306.048, 351.543, 0], + "to": [1.954, 0.387, 0], + "ti": [-1.795, -0.137, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 22, + "s": [311.672, 352.309, 0], + "to": [1.795, 0.137, 0], + "ti": [-1.633, 0.088, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [316.816, 352.363, 0], + "to": [1.633, -0.088, 0], + "ti": [-1.471, 0.288, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [321.472, 351.78, 0], + "to": [1.471, -0.288, 0], + "ti": [-1.306, 0.458, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 25, + "s": [325.642, 350.637, 0], + "to": [1.306, -0.458, 0], + "ti": [-1.135, 0.591, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [329.308, 349.031, 0], + "to": [1.135, -0.591, 0], + "ti": [-0.968, 0.681, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 27, + "s": [332.455, 347.089, 0], + "to": [0.968, -0.681, 0], + "ti": [-0.817, 0.731, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 28, + "s": [335.117, 344.942, 0], + "to": [0.817, -0.731, 0], + "ti": [-0.687, 0.746, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 29, + "s": [337.355, 342.705, 0], + "to": [0.687, -0.746, 0], + "ti": [-0.581, 0.735, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 30, + "s": [339.24, 340.468, 0], + "to": [0.581, -0.735, 0], + "ti": [-0.497, 0.706, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 31, + "s": [340.842, 338.297, 0], + "to": [0.497, -0.706, 0], + "ti": [-0.432, 0.666, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 32, + "s": [342.224, 336.234, 0], + "to": [0.432, -0.666, 0], + "ti": [-0.383, 0.622, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [343.437, 334.299, 0], + "to": [0.383, -0.622, 0], + "ti": [-0.345, 0.576, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 34, + "s": [344.521, 332.502, 0], + "to": [0.345, -0.576, 0], + "ti": [-0.315, 0.529, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [345.505, 330.845, 0], + "to": [0.315, -0.529, 0], + "ti": [-0.292, 0.487, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 36, + "s": [346.41, 329.327, 0], + "to": [0.292, -0.487, 0], + "ti": [-0.279, 0.457, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 37, + "s": [347.258, 327.924, 0], + "to": [0.279, -0.457, 0], + "ti": [-0.273, 0.434, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 38, + "s": [348.086, 326.587, 0], + "to": [0.273, -0.434, 0], + "ti": [-0.265, 0.411, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 39, + "s": [348.894, 325.317, 0], + "to": [0.265, -0.411, 0], + "ti": [-0.255, 0.387, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 40, + "s": [349.675, 324.119, 0], + "to": [0.255, -0.387, 0], + "ti": [-0.243, 0.361, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 41, + "s": [350.425, 322.996, 0], + "to": [0.243, -0.361, 0], + "ti": [-0.229, 0.334, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 42, + "s": [351.135, 321.951, 0], + "to": [0.229, -0.334, 0], + "ti": [-0.212, 0.306, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 43, + "s": [351.799, 320.989, 0], + "to": [0.212, -0.306, 0], + "ti": [-0.194, 0.278, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 44, + "s": [352.409, 320.113, 0], + "to": [0.194, -0.278, 0], + "ti": [-0.173, 0.249, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 45, + "s": [352.961, 319.322, 0], + "to": [0.173, -0.249, 0], + "ti": [-0.15, 0.219, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 46, + "s": [353.448, 318.619, 0], + "to": [0.15, -0.219, 0], + "ti": [-0.126, 0.188, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 47, + "s": [353.864, 318.007, 0], + "to": [0.126, -0.188, 0], + "ti": [-0.101, 0.156, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 48, + "s": [354.205, 317.489, 0], + "to": [0.101, -0.156, 0], + "ti": [-0.075, 0.131, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 49, + "s": [354.467, 317.068, 0], + "to": [0.075, -0.131, 0], + "ti": [-0.049, 0.118, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 50, + "s": [354.652, 316.704, 0], + "to": [0.049, -0.118, 0], + "ti": [-0.024, 0.112, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 51, + "s": [354.762, 316.358, 0], + "to": [0.024, -0.112, 0], + "ti": [0.001, 0.104, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 52, + "s": [354.797, 316.033, 0], + "to": [-0.001, -0.104, 0], + "ti": [0.025, 0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 53, + "s": [354.758, 315.735, 0], + "to": [-0.025, -0.094, 0], + "ti": [0.049, 0.084, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 54, + "s": [354.646, 315.467, 0], + "to": [-0.049, -0.084, 0], + "ti": [0.071, 0.072, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 55, + "s": [354.465, 315.232, 0], + "to": [-0.071, -0.072, 0], + "ti": [0.091, 0.06, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 56, + "s": [354.22, 315.034, 0], + "to": [-0.091, -0.06, 0], + "ti": [0.109, 0.047, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 57, + "s": [353.918, 314.873, 0], + "to": [-0.109, -0.047, 0], + "ti": [0.124, 0.033, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 58, + "s": [353.565, 314.754, 0], + "to": [-0.124, -0.033, 0], + "ti": [0.066, 0.013, 0] + }, + { "t": 59, "s": [353.172, 314.677, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.872, 1.101, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 9, + "s": [121.274, 69.223, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.683, 1.187, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.239, 0.046, 0] }, + "t": 10, + "s": [102.389, 75.161, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.98, 0.955, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.058, 0] }, + "t": 11, + "s": [92.262, 61.994, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.931, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.026, -0.097, 0] }, + "t": 12, + "s": [63.863, 104.769, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.274, 0.951, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.401, 0.012, 0] }, + "t": 13, + "s": [85.432, 85.001, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.092, 1.206, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, -0.118, 0] }, + "t": 14, + "s": [81.722, 108.079, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.882, 0.993, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, 0.059, 0] }, + "t": 15, + "s": [53.108, 98.543, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.078, 0.868, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.286, -0.008, 0] }, + "t": 16, + "s": [113.303, 131.662, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.91, 0.819, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 0.226, 0] }, + "t": 17, + "s": [138.039, 101.322, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.209, 0.154, 0] }, + "t": 18, + "s": [90.083, 83.561, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.383, 0.796, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.061, 0.009, 0] }, + "t": 19, + "s": [86.533, 62.73, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 1.025, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, 0.141, 0] }, + "t": 20, + "s": [88.578, 85.983, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.633, 0.981, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.181, 0.019, 0] }, + "t": 21, + "s": [52.598, 119.725, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.913, 0.912, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.108, -0.024, 0] }, + "t": 22, + "s": [63.951, 75.737, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.114, 2.104, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.9, 1.706, 0] }, + "t": 23, + "s": [102.646, 109.959, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.968, 0.914, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.09, 0.077, 0] }, + "t": 24, + "s": [104.421, 111.717, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 1.195, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.051, 2.682, 0] }, + "t": 25, + "s": [126.369, 86.671, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.465, 2.183, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.02, 0.058, 0] }, + "t": 26, + "s": [112.748, 85.867, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.895, 1.029, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, 0.078, 0] }, + "t": 27, + "s": [123.717, 88.551, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.153, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.407, 0.021, 0] }, + "t": 28, + "s": [51.588, 47.768, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 2.015, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 1.345, 0] }, + "t": 29, + "s": [33.003, 102.64, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.199, 1.013, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.892, 0.077, 0] }, + "t": 30, + "s": [85.701, 106.264, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.078, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.059, 0.011, 0] }, + "t": 31, + "s": [81.198, 58.493, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.008, 0.991, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, -0.058, 0] }, + "t": 32, + "s": [96.43, 113.732, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.02, 0.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, -0.01, 0] }, + "t": 33, + "s": [67.01, 81.239, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.963, 0.771, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, -0.605, 0] }, + "t": 34, + "s": [99.306, 110.284, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.823, 0.301, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.067, 0.131, 0] }, + "t": 35, + "s": [59.341, 106.769, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.189, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.158, 0.095, 0] }, + "t": 36, + "s": [81.457, 100.615, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.974, 1.274, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.058, -1.127, 0] }, + "t": 37, + "s": [106.222, 55.153, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 0.719, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.038, 0.064, 0] }, + "t": 38, + "s": [25.147, 58.283, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.061, 0.119, 0] }, + "t": 39, + "s": [80.819, 44.863, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.839, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.137, -0.083, 0] }, + "t": 40, + "s": [48.72, 13.108, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.058, 0.872, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.173, 0] }, + "t": 41, + "s": [60.869, 29.019, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 1.357, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.034, 0.237, 0] }, + "t": 42, + "s": [73.011, 43.835, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.288, 1.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.054, 0.068, 0] }, + "t": 43, + "s": [52.393, 51.855, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.942, 0.906, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.065, 0.011, 0] }, + "t": 44, + "s": [64.871, 9.492, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.756, 0.775, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.193, 0.731, 0] }, + "t": 45, + "s": [9.336, 58.19, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.038, 1.229, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.127, 0.132, 0] }, + "t": 46, + "s": [26.111, 64.455, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.014, 0.878, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.026, 0.061, 0] }, + "t": 47, + "s": [58.4, 75.08, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.98, 0.77, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.012, 0.262, 0] }, + "t": 48, + "s": [11.51, 35.267, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 1.06, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.026, 0.131, 0] }, + "t": 49, + "s": [66.25, 16.716, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.825, 0.866, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.377, 0.035, 0] }, + "t": 50, + "s": [24.642, -15.996, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.942, 0.933, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.159, 0.221, 0] }, + "t": 51, + "s": [32.168, 40.121, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.214, 0.377, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.193, -0.341, 0] }, + "t": 52, + "s": [40.464, 74.155, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.906, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.06, 0.096, 0] }, + "t": 53, + "s": [37.96, 67.475, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.566, 1.064, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.711, -0.084, 0] }, + "t": 54, + "s": [46.883, 24.242, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.073, 0.829, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.088, 0.036, 0] }, + "t": 55, + "s": [48.067, 45.748, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.938, 1.019, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.039, 0.163, 0] }, + "t": 56, + "s": [69.141, 7.771, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 0.887, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.247, 0.016, 0] }, + "t": 57, + "s": [29.508, -32.064, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, 0.316, 0] }, + "t": 58, + "s": [39.499, 17.057, 100] + }, + { "t": 59, "s": [27.006, 34.616, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 9, + "op": 60, + "st": 9, + "bm": 0 + }, + { + "ddd": 0, + "ind": 45, + "ty": 4, + "nm": "Shape Layer 7", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 5, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 10, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 32, + "s": [100] + }, + { "t": 48, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.638 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 5, + "s": [269.945, 256.942, 0], + "to": [-0.448, -0.21, 0], + "ti": [1.991, 0.807, 0] + }, + { + "i": { "x": 0.833, "y": 0.768 }, + "o": { "x": 0.167, "y": 0.108 }, + "t": 6, + "s": [267.255, 255.684, 0], + "to": [-1.991, -0.807, 0], + "ti": [4.389, 1.346, 0] + }, + { + "i": { "x": 0.833, "y": 0.825 }, + "o": { "x": 0.167, "y": 0.13 }, + "t": 7, + "s": [257.999, 252.103, 0], + "to": [-4.389, -1.346, 0], + "ti": [6.039, 1.363, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 8, + "s": [240.923, 247.608, 0], + "to": [-6.039, -1.363, 0], + "ti": [5.978, 1.14, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 9, + "s": [221.767, 243.923, 0], + "to": [-5.978, -1.14, 0], + "ti": [5.09, 1.054, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 10, + "s": [205.053, 240.767, 0], + "to": [-5.09, -1.054, 0], + "ti": [4.207, 1.095, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 11, + "s": [191.227, 237.6, 0], + "to": [-4.207, -1.095, 0], + "ti": [3.481, 1.188, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 12, + "s": [179.812, 234.195, 0], + "to": [-3.481, -1.188, 0], + "ti": [2.886, 1.294, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 13, + "s": [170.338, 230.471, 0], + "to": [-2.886, -1.294, 0], + "ti": [2.378, 1.39, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 14, + "s": [162.496, 226.433, 0], + "to": [-2.378, -1.39, 0], + "ti": [1.933, 1.462, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 15, + "s": [156.068, 222.132, 0], + "to": [-1.933, -1.462, 0], + "ti": [1.54, 1.499, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 16, + "s": [150.896, 217.662, 0], + "to": [-1.54, -1.499, 0], + "ti": [1.198, 1.498, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 17, + "s": [146.827, 213.136, 0], + "to": [-1.198, -1.498, 0], + "ti": [0.906, 1.46, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 18, + "s": [143.71, 208.674, 0], + "to": [-0.906, -1.46, 0], + "ti": [0.665, 1.393, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [141.391, 204.376, 0], + "to": [-0.665, -1.393, 0], + "ti": [0.471, 1.306, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [139.72, 200.316, 0], + "to": [-0.471, -1.306, 0], + "ti": [0.313, 1.216, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 21, + "s": [138.565, 196.541, 0], + "to": [-0.313, -1.216, 0], + "ti": [0.184, 1.137, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [137.84, 193.02, 0], + "to": [-0.184, -1.137, 0], + "ti": [0.081, 1.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 23, + "s": [137.463, 189.72, 0], + "to": [-0.081, -1.063, 0], + "ti": [0.003, 0.99, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 24, + "s": [137.352, 186.641, 0], + "to": [-0.003, -0.99, 0], + "ti": [-0.055, 0.919, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 25, + "s": [137.442, 183.779, 0], + "to": [0.055, -0.919, 0], + "ti": [-0.097, 0.849, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 26, + "s": [137.68, 181.129, 0], + "to": [0.097, -0.849, 0], + "ti": [-0.126, 0.781, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 27, + "s": [138.024, 178.686, 0], + "to": [0.126, -0.781, 0], + "ti": [-0.145, 0.716, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [138.439, 176.442, 0], + "to": [0.145, -0.716, 0], + "ti": [-0.156, 0.653, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 29, + "s": [138.897, 174.391, 0], + "to": [0.156, -0.653, 0], + "ti": [-0.159, 0.592, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [139.374, 172.526, 0], + "to": [0.159, -0.592, 0], + "ti": [-0.157, 0.533, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 31, + "s": [139.853, 170.839, 0], + "to": [0.157, -0.533, 0], + "ti": [-0.15, 0.477, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 32, + "s": [140.317, 169.325, 0], + "to": [0.15, -0.477, 0], + "ti": [-0.139, 0.422, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 33, + "s": [140.753, 167.978, 0], + "to": [0.139, -0.422, 0], + "ti": [-0.125, 0.37, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 34, + "s": [141.152, 166.791, 0], + "to": [0.125, -0.37, 0], + "ti": [-0.109, 0.319, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 35, + "s": [141.505, 165.76, 0], + "to": [0.109, -0.319, 0], + "ti": [-0.091, 0.27, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 36, + "s": [141.806, 164.879, 0], + "to": [0.091, -0.27, 0], + "ti": [-0.072, 0.222, 0] + }, + { + "i": { "x": 0.833, "y": 0.853 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 37, + "s": [142.051, 164.142, 0], + "to": [0.072, -0.222, 0], + "ti": [-0.052, 0.176, 0] + }, + { + "i": { "x": 0.833, "y": 0.858 }, + "o": { "x": 0.167, "y": 0.192 }, + "t": 38, + "s": [142.237, 163.545, 0], + "to": [0.052, -0.176, 0], + "ti": [-0.032, 0.132, 0] + }, + { + "i": { "x": 0.833, "y": 0.865 }, + "o": { "x": 0.167, "y": 0.201 }, + "t": 39, + "s": [142.363, 163.084, 0], + "to": [0.032, -0.132, 0], + "ti": [-0.012, 0.09, 0] + }, + { + "i": { "x": 0.833, "y": 0.873 }, + "o": { "x": 0.167, "y": 0.218 }, + "t": 40, + "s": [142.428, 162.753, 0], + "to": [0.012, -0.09, 0], + "ti": [0.007, 0.05, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.243 }, + "t": 41, + "s": [142.433, 162.544, 0], + "to": [-0.007, -0.05, 0], + "ti": [0.026, 0.012, 0] + }, + { + "i": { "x": 0.833, "y": 0.765 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 42, + "s": [142.383, 162.452, 0], + "to": [-0.026, -0.012, 0], + "ti": [0.042, -0.024, 0] + }, + { + "i": { "x": 0.833, "y": 0.791 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 43, + "s": [142.28, 162.472, 0], + "to": [-0.042, 0.024, 0], + "ti": [0.057, -0.059, 0] + }, + { + "i": { "x": 0.833, "y": 0.816 }, + "o": { "x": 0.167, "y": 0.139 }, + "t": 44, + "s": [142.128, 162.599, 0], + "to": [-0.057, 0.059, 0], + "ti": [0.07, -0.085, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 45, + "s": [141.935, 162.827, 0], + "to": [-0.07, 0.085, 0], + "ti": [0.078, -0.097, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 46, + "s": [141.71, 163.111, 0], + "to": [-0.078, 0.097, 0], + "ti": [0.083, -0.101, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 47, + "s": [141.466, 163.41, 0], + "to": [-0.083, 0.101, 0], + "ti": [0.085, -0.104, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 48, + "s": [141.211, 163.718, 0], + "to": [-0.085, 0.104, 0], + "ti": [0.084, -0.104, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 49, + "s": [140.955, 164.031, 0], + "to": [-0.084, 0.104, 0], + "ti": [0.078, -0.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 50, + "s": [140.709, 164.343, 0], + "to": [-0.078, 0.103, 0], + "ti": [0.08, -0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 51, + "s": [140.484, 164.649, 0], + "to": [-0.08, 0.102, 0], + "ti": [0.095, -0.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 52, + "s": [140.231, 164.956, 0], + "to": [-0.095, 0.103, 0], + "ti": [0.112, -0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 53, + "s": [139.917, 165.266, 0], + "to": [-0.112, 0.102, 0], + "ti": [0.125, -0.098, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 54, + "s": [139.556, 165.569, 0], + "to": [-0.125, 0.098, 0], + "ti": [0.134, -0.092, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 55, + "s": [139.164, 165.856, 0], + "to": [-0.134, 0.092, 0], + "ti": [0.138, -0.083, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 56, + "s": [138.753, 166.12, 0], + "to": [-0.138, 0.083, 0], + "ti": [0.139, -0.072, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 57, + "s": [138.335, 166.353, 0], + "to": [-0.139, 0.072, 0], + "ti": [0.135, -0.059, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 58, + "s": [137.921, 166.55, 0], + "to": [-0.135, 0.059, 0], + "ti": [0.067, -0.026, 0] + }, + { "t": 59, "s": [137.522, 166.706, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.747, 0.81, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 5, + "s": [67.084, 129.75, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.927, 0.854, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.075, 0.148, 0] }, + "t": 6, + "s": [62.33, 109.198, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.16, 1.108, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.593, 0.195, 0] }, + "t": 7, + "s": [109.714, 82.895, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.95, 1.011, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.047, 0] }, + "t": 8, + "s": [103.874, 63.18, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.652, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.126, 0.009, 0] }, + "t": 9, + "s": [120.913, 108.471, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.996, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.11, -0.133, 0] }, + "t": 10, + "s": [114.137, 57.365, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 1.188, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.004, -0.05, 0] }, + "t": 11, + "s": [92.637, 77.058, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.717, 0.892, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, 0.058, 0] }, + "t": 12, + "s": [113.058, 64.766, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 0.862, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.118, 0.369, 0] }, + "t": 13, + "s": [94.823, 104.736, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.686, 1.222, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.095, 0.21, 0] }, + "t": 14, + "s": [51.043, 116.383, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.935, 0.877, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.061, 0] }, + "t": 15, + "s": [71.52, 124.057, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.826, 0.869, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.292, 0.259, 0] }, + "t": 16, + "s": [128.168, 95.925, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 1.124, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.16, 0.23, 0] }, + "t": 17, + "s": [115.579, 82.608, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.512, 0.751, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.223, 0.05, 0] }, + "t": 18, + "s": [101.896, 75.048, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.973, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.1, 0.125, 0] }, + "t": 19, + "s": [93.758, 93.897, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.898, 0.923, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.041, 0.012, 0] }, + "t": 20, + "s": [54.25, 131.368, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.724, 0.144, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.465, -1.005, 0] }, + "t": 21, + "s": [80.758, 87.771, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.924, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.119, 0.092, 0] }, + "t": 22, + "s": [86.54, 91.108, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.904, 0.995, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.912, 0.012, 0] }, + "t": 23, + "s": [99.918, 122.044, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [11.64, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.63, -0.006, 0] }, + "t": 24, + "s": [98.798, 85.895, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.179, 0.764, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.083, -0.058, 0] }, + "t": 25, + "s": [98.627, 119.725, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.057, 0.129, 0] }, + "t": 26, + "s": [120.625, 99.715, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.129, 0.846, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.428, 0, 0] }, + "t": 27, + "s": [51.46, 62.943, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.842, 1.057, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, 0.182, 0] }, + "t": 28, + "s": [34.76, 99.837, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.887, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.176, 0.034, 0] }, + "t": 29, + "s": [77.215, 131.147, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.072, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.319, -0.044, 0] }, + "t": 30, + "s": [115.216, 78.51, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.783, 0.915, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.039, 0, 0] }, + "t": 31, + "s": [128.632, 112.897, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 4.711, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.135, 4.172, 0] }, + "t": 32, + "s": [103.693, 78.444, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.008, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.662, 0.082, 0] }, + "t": 33, + "s": [63.665, 77.742, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.628, 0.82, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, -0.016, 0] }, + "t": 34, + "s": [68.138, 109.713, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.039, 0.849, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.074, 0.155, 0] }, + "t": 35, + "s": [63.26, 82.764, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.925, 1.07, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, 0.186, 0] }, + "t": 36, + "s": [104.89, 51.456, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.219, 1.029, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.727, 0.038, 0] }, + "t": 37, + "s": [43.633, 26.02, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.892, 0.966, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.06, 0.022, 0] }, + "t": 38, + "s": [49.933, 72.695, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.243, 0.988, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.367, -0.056, 0] }, + "t": 39, + "s": [27.075, 9.722, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.832, 0.92, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, -0.015, 0] }, + "t": 40, + "s": [20.365, 47.293, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.936, 3.513, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.165, -2.021, 0] }, + "t": 41, + "s": [46.638, 15.298, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.362, 0.978, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.284, 0.081, 0] }, + "t": 42, + "s": [73.418, 16.565, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.887, 0.789, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, -0.029, 0] }, + "t": 43, + "s": [67.341, -22.905, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.174, 0.978, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.315, 0.138, 0] }, + "t": 44, + "s": [26.919, 6.334, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 0.904, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.056, -0.031, 0] }, + "t": 45, + "s": [12.404, 51.222, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.142, 1.239, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.264, 0.63, 0] }, + "t": 46, + "s": [57.152, 18.419, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.933, 1.11, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.052, 0.062, 0] }, + "t": 47, + "s": [46.41, 13.418, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 0.964, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.344, 0.047, 0] }, + "t": 48, + "s": [75.422, 32.787, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.055, 0.769, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.185, -0.063, 0] }, + "t": 49, + "s": [69.769, -12.086, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.398, 0.912, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.033, 0.13, 0] }, + "t": 50, + "s": [65.147, 13.473, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.884, 2.464, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 1.481, 0] }, + "t": 51, + "s": [72.836, 58.774, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.911, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.296, 0.079, 0] }, + "t": 52, + "s": [28.388, 61.475, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.369, 0.846, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.317, -0.176, 0] }, + "t": 53, + "s": [10.975, 11.341, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.072, 1.254, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, 0.182, 0] }, + "t": 54, + "s": [9.799, 27.481, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.039, 0.063, 0] }, + "t": 55, + "s": [44.403, 41.158, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, -0.052, 0] }, + "t": 56, + "s": [-20.175, -14.141, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.193, 1.424, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.504, -0.402, 0] }, + "t": 57, + "s": [25.048, 19.928, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.093, 0.07, 0] }, + "t": 58, + "s": [27.7, 14.076, 100] + }, + { "t": 59, "s": [50.717, 49.703, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 5, + "op": 60, + "st": 5, + "bm": 0 + }, + { + "ddd": 0, + "ind": 46, + "ty": 4, + "nm": "Shape Layer 6", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 17, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 39, + "s": [100] + }, + { "t": 55, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.603 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 12, + "s": [269.021, 253.165, 0], + "to": [0.334, -0.343, 0], + "ti": [-1.472, 1.743, 0] + }, + { + "i": { "x": 0.833, "y": 0.765 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 13, + "s": [271.027, 251.106, 0], + "to": [1.472, -1.743, 0], + "ti": [-3.01, 4.091, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 14, + "s": [277.851, 242.705, 0], + "to": [3.01, -4.091, 0], + "ti": [-3.712, 5.823, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 15, + "s": [289.088, 226.561, 0], + "to": [3.712, -5.823, 0], + "ti": [-3.262, 5.954, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 16, + "s": [300.123, 207.765, 0], + "to": [3.262, -5.954, 0], + "ti": [-2.491, 5.217, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 17, + "s": [308.66, 190.839, 0], + "to": [2.491, -5.217, 0], + "ti": [-1.89, 4.434, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 18, + "s": [315.071, 176.461, 0], + "to": [1.89, -4.434, 0], + "ti": [-1.471, 3.789, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 19, + "s": [320.001, 164.236, 0], + "to": [1.471, -3.789, 0], + "ti": [-1.175, 3.273, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 20, + "s": [323.898, 153.727, 0], + "to": [1.175, -3.273, 0], + "ti": [-0.958, 2.857, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 21, + "s": [327.049, 144.595, 0], + "to": [0.958, -2.857, 0], + "ti": [-0.794, 2.513, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 22, + "s": [329.644, 136.588, 0], + "to": [0.794, -2.513, 0], + "ti": [-0.666, 2.226, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 23, + "s": [331.811, 129.516, 0], + "to": [0.666, -2.226, 0], + "ti": [-0.563, 1.981, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 24, + "s": [333.638, 123.235, 0], + "to": [0.563, -1.981, 0], + "ti": [-0.48, 1.769, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 25, + "s": [335.19, 117.632, 0], + "to": [0.48, -1.769, 0], + "ti": [-0.41, 1.586, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 26, + "s": [336.516, 112.618, 0], + "to": [0.41, -1.586, 0], + "ti": [-0.351, 1.424, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 27, + "s": [337.65, 108.119, 0], + "to": [0.351, -1.424, 0], + "ti": [-0.3, 1.282, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 28, + "s": [338.62, 104.073, 0], + "to": [0.3, -1.282, 0], + "ti": [-0.255, 1.156, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [339.448, 100.428, 0], + "to": [0.255, -1.156, 0], + "ti": [-0.216, 1.044, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 30, + "s": [340.152, 97.139, 0], + "to": [0.216, -1.044, 0], + "ti": [-0.181, 0.944, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 31, + "s": [340.744, 94.166, 0], + "to": [0.181, -0.944, 0], + "ti": [-0.149, 0.856, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 32, + "s": [341.237, 91.474, 0], + "to": [0.149, -0.856, 0], + "ti": [-0.12, 0.778, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 33, + "s": [341.639, 89.031, 0], + "to": [0.12, -0.778, 0], + "ti": [-0.094, 0.709, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 34, + "s": [341.96, 86.808, 0], + "to": [0.094, -0.709, 0], + "ti": [-0.069, 0.648, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 35, + "s": [342.205, 84.778, 0], + "to": [0.069, -0.648, 0], + "ti": [-0.038, 0.59, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 36, + "s": [342.374, 82.918, 0], + "to": [0.038, -0.59, 0], + "ti": [-0.003, 0.532, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 37, + "s": [342.434, 81.24, 0], + "to": [0.003, -0.532, 0], + "ti": [0.027, 0.479, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 38, + "s": [342.395, 79.728, 0], + "to": [-0.027, -0.479, 0], + "ti": [0.051, 0.433, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 39, + "s": [342.275, 78.364, 0], + "to": [-0.051, -0.433, 0], + "ti": [0.069, 0.392, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 40, + "s": [342.091, 77.129, 0], + "to": [-0.069, -0.392, 0], + "ti": [0.082, 0.356, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 41, + "s": [341.861, 76.01, 0], + "to": [-0.082, -0.356, 0], + "ti": [0.091, 0.324, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 42, + "s": [341.597, 74.992, 0], + "to": [-0.091, -0.324, 0], + "ti": [0.096, 0.296, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 43, + "s": [341.314, 74.063, 0], + "to": [-0.096, -0.296, 0], + "ti": [0.096, 0.272, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 44, + "s": [341.023, 73.213, 0], + "to": [-0.096, -0.272, 0], + "ti": [0.094, 0.25, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 45, + "s": [340.736, 72.433, 0], + "to": [-0.094, -0.25, 0], + "ti": [0.088, 0.23, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 46, + "s": [340.462, 71.716, 0], + "to": [-0.088, -0.23, 0], + "ti": [0.08, 0.212, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 47, + "s": [340.209, 71.055, 0], + "to": [-0.08, -0.212, 0], + "ti": [0.069, 0.195, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 48, + "s": [339.984, 70.445, 0], + "to": [-0.069, -0.195, 0], + "ti": [0.056, 0.18, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 49, + "s": [339.795, 69.882, 0], + "to": [-0.056, -0.18, 0], + "ti": [0.042, 0.165, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 50, + "s": [339.646, 69.365, 0], + "to": [-0.042, -0.165, 0], + "ti": [0.027, 0.151, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 51, + "s": [339.542, 68.892, 0], + "to": [-0.027, -0.151, 0], + "ti": [0.01, 0.143, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 52, + "s": [339.484, 68.461, 0], + "to": [-0.01, -0.143, 0], + "ti": [-0.008, 0.149, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 53, + "s": [339.48, 68.033, 0], + "to": [0.008, -0.149, 0], + "ti": [-0.028, 0.16, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 54, + "s": [339.535, 67.568, 0], + "to": [0.028, -0.16, 0], + "ti": [-0.047, 0.169, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 55, + "s": [339.647, 67.072, 0], + "to": [0.047, -0.169, 0], + "ti": [-0.065, 0.176, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 56, + "s": [339.816, 66.553, 0], + "to": [0.065, -0.176, 0], + "ti": [-0.083, 0.179, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 57, + "s": [340.039, 66.018, 0], + "to": [0.083, -0.179, 0], + "ti": [-0.099, 0.18, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 58, + "s": [340.312, 65.476, 0], + "to": [0.099, -0.18, 0], + "ti": [-0.053, 0.09, 0] + }, + { "t": 59, "s": [340.633, 64.937, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.887, 0.858, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 12, + "s": [119.548, 103.77, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.117, 0.413, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.32, 0.202, 0] }, + "t": 13, + "s": [75.487, 97.516, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.839, 0.857, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.049, 0.097, 0] }, + "t": 14, + "s": [59.951, 93.123, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.919, 1.065, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.172, 0.2, 0] }, + "t": 15, + "s": [97.388, 66.554, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-2.744, 0.826, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-2.464, 0.037, 0] }, + "t": 16, + "s": [132.453, 47.628, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.085, 0.16, 0] }, + "t": 17, + "s": [131.306, 81.38, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.123, 0.94, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.42, -0.023, 0] }, + "t": 18, + "s": [80.905, 117.92, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.005, 1.294, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.05, -0.217, 0] }, + "t": 19, + "s": [68.413, 89.26, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.919, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.004, 0.065, 0] }, + "t": 20, + "s": [99.306, 97.223, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.384, 0.975, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-3.282, 0, 0] }, + "t": 21, + "s": [66.686, 61.177, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.766, 1.087, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, -0.035, 0] }, + "t": 22, + "s": [67.494, 97.2, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.858, 0.983, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.129, 0.043, 0] }, + "t": 23, + "s": [80.098, 71.917, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.241, 0.896, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.201, -0.022, 0] }, + "t": 24, + "s": [102.945, 123.537, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 1.252, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, 0.427, 0] }, + "t": 25, + "s": [119.07, 82.641, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.957, 0.883, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.378, 0.063, 0] }, + "t": 26, + "s": [56.225, 72.735, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.764, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.089, 0.289, 0] }, + "t": 27, + "s": [67.587, 112.547, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.911, 1.01, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.075, -0.022, 0] }, + "t": 28, + "s": [62.103, 128.666, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.018, 1.194, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.415, 0.009, 0] }, + "t": 29, + "s": [117.871, 115.971, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.145, 0.86, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.015, 0.058, 0] }, + "t": 30, + "s": [121.362, 130.232, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.007, 1.04, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, 0.206, 0] }, + "t": 31, + "s": [117.096, 82.77, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, 0.027, 0] }, + "t": 32, + "s": [77.619, 50.423, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.856, 0.71, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.172, -1.15, 0] }, + "t": 33, + "s": [120.562, 98.344, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.484, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.199, 0.117, 0] }, + "t": 34, + "s": [106.534, 95.106, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.217, 1.063, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.099, 0] }, + "t": 35, + "s": [96.391, 87.062, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.954, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.06, 0.036, 0] }, + "t": 36, + "s": [106.476, 45.285, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.104, 0.996, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.179, -0.103, 0] }, + "t": 37, + "s": [70.097, 118.413, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.008, 1.087, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.046, -0.004, 0] }, + "t": 38, + "s": [81.643, 85.768, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, 0.043, 0] }, + "t": 39, + "s": [55.641, 116.896, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.011, 0.466, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.675, 1.402, 0] }, + "t": 40, + "s": [83.987, 53.173, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.17, 0.898, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, 0.099, 0] }, + "t": 41, + "s": [85.471, 49.147, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.916, 1.762, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.056, 0.465, 0] }, + "t": 42, + "s": [102.003, 27.383, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.131, 1.022, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [7.85, 0.075, 0] }, + "t": 43, + "s": [51.831, 22.635, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-1.033, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, 0.017, 0] }, + "t": 44, + "s": [51.293, 70.822, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.9, 1.802, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.087, 1.766, 0] }, + "t": 45, + "s": [52.676, 10.032, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.828, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.491, 0.075, 0] }, + "t": 46, + "s": [85.033, 7.021, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.048, 0.89, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.162, -0.017, 0] }, + "t": 47, + "s": [91.644, 38.996, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.854, 1.128, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.031, 0.341, 0] }, + "t": 48, + "s": [98.641, 12.455, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.425, 0.857, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.195, 0.05, 0] }, + "t": 49, + "s": [87.583, 3.883, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.985, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.097, 0.199, 0] }, + "t": 50, + "s": [79.333, 25.603, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.932, 0.756, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.174, -0.018, 0] }, + "t": 51, + "s": [30.689, 41.218, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.381, 1.037, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.362, 0.127, 0] }, + "t": 52, + "s": [-14.018, 28.37, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.031, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, 0.026, 0] }, + "t": 53, + "s": [-5.646, 3.642, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.941, 0.845, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.022, -0.306, 0] }, + "t": 54, + "s": [48.164, 39.412, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.726, 0.492, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.197, 0.18, 0] }, + "t": 55, + "s": [-25.525, 31.762, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 1.052, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.12, 0.1, 0] }, + "t": 56, + "s": [-3.614, 25.17, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.387, 0.994, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.415, 0.032, 0] }, + "t": 57, + "s": [46.515, -8.426, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.079, -0.006, 0] }, + "t": 58, + "s": [48.307, 46.093, 100] + }, + { "t": 59, "s": [16.689, -4.541, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 12, + "op": 60, + "st": 12, + "bm": 0 + }, + { + "ddd": 0, + "ind": 47, + "ty": 4, + "nm": "Shape Layer 5", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 8, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 35, + "s": [100] + }, + { "t": 51, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.549 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [272.244, 257.087, 0], + "to": [-0.124, -0.32, 0], + "ti": [0.816, 1.673, 0] + }, + { + "i": { "x": 0.833, "y": 0.761 }, + "o": { "x": 0.167, "y": 0.102 }, + "t": 9, + "s": [271.5, 255.164, 0], + "to": [-0.816, -1.673, 0], + "ti": [2.219, 3.742, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.128 }, + "t": 10, + "s": [267.351, 247.049, 0], + "to": [-2.219, -3.742, 0], + "ti": [3.396, 4.937, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 11, + "s": [258.186, 232.713, 0], + "to": [-3.396, -4.937, 0], + "ti": [3.5, 4.76, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 12, + "s": [246.972, 217.428, 0], + "to": [-3.5, -4.76, 0], + "ti": [2.913, 4.097, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 13, + "s": [237.183, 204.156, 0], + "to": [-2.913, -4.097, 0], + "ti": [2.265, 3.524, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 14, + "s": [229.496, 192.846, 0], + "to": [-2.265, -3.524, 0], + "ti": [1.734, 3.087, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 15, + "s": [223.596, 183.013, 0], + "to": [-1.734, -3.087, 0], + "ti": [1.325, 2.741, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 16, + "s": [219.089, 174.323, 0], + "to": [-1.325, -2.741, 0], + "ti": [1.014, 2.455, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 17, + "s": [215.647, 166.568, 0], + "to": [-1.014, -2.455, 0], + "ti": [0.78, 2.215, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 18, + "s": [213.008, 159.593, 0], + "to": [-0.78, -2.215, 0], + "ti": [0.606, 2.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [210.967, 153.279, 0], + "to": [-0.606, -2.01, 0], + "ti": [0.48, 1.83, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [209.371, 147.533, 0], + "to": [-0.48, -1.83, 0], + "ti": [0.392, 1.66, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [208.089, 142.301, 0], + "to": [-0.392, -1.66, 0], + "ti": [0.329, 1.501, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [207.021, 137.573, 0], + "to": [-0.329, -1.501, 0], + "ti": [0.281, 1.36, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [206.115, 133.293, 0], + "to": [-0.281, -1.36, 0], + "ti": [0.243, 1.235, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [205.336, 129.411, 0], + "to": [-0.243, -1.235, 0], + "ti": [0.212, 1.123, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 25, + "s": [204.658, 125.885, 0], + "to": [-0.212, -1.123, 0], + "ti": [0.187, 1.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [204.062, 122.676, 0], + "to": [-0.187, -1.022, 0], + "ti": [0.165, 0.933, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [203.537, 119.751, 0], + "to": [-0.165, -0.933, 0], + "ti": [0.145, 0.852, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [203.075, 117.081, 0], + "to": [-0.145, -0.852, 0], + "ti": [0.126, 0.779, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [202.67, 114.64, 0], + "to": [-0.126, -0.779, 0], + "ti": [0.108, 0.713, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 30, + "s": [202.32, 112.406, 0], + "to": [-0.108, -0.713, 0], + "ti": [0.09, 0.654, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 31, + "s": [202.024, 110.359, 0], + "to": [-0.09, -0.654, 0], + "ti": [0.072, 0.599, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 32, + "s": [201.781, 108.484, 0], + "to": [-0.072, -0.599, 0], + "ti": [0.054, 0.55, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [201.591, 106.763, 0], + "to": [-0.054, -0.55, 0], + "ti": [0.036, 0.505, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 34, + "s": [201.455, 105.183, 0], + "to": [-0.036, -0.505, 0], + "ti": [0.018, 0.464, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [201.374, 103.731, 0], + "to": [-0.018, -0.464, 0], + "ti": [-0.001, 0.427, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 36, + "s": [201.348, 102.397, 0], + "to": [0.001, -0.427, 0], + "ti": [-0.019, 0.391, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 37, + "s": [201.377, 101.171, 0], + "to": [0.019, -0.391, 0], + "ti": [-0.037, 0.358, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 38, + "s": [201.462, 100.048, 0], + "to": [0.037, -0.358, 0], + "ti": [-0.055, 0.327, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 39, + "s": [201.6, 99.021, 0], + "to": [0.055, -0.327, 0], + "ti": [-0.072, 0.298, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 40, + "s": [201.792, 98.084, 0], + "to": [0.072, -0.298, 0], + "ti": [-0.089, 0.269, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 41, + "s": [202.034, 97.235, 0], + "to": [0.089, -0.269, 0], + "ti": [-0.104, 0.241, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 42, + "s": [202.325, 96.471, 0], + "to": [0.104, -0.241, 0], + "ti": [-0.118, 0.213, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 43, + "s": [202.66, 95.791, 0], + "to": [0.118, -0.213, 0], + "ti": [-0.131, 0.186, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 44, + "s": [203.035, 95.192, 0], + "to": [0.131, -0.186, 0], + "ti": [-0.142, 0.158, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 45, + "s": [203.446, 94.675, 0], + "to": [0.142, -0.158, 0], + "ti": [-0.151, 0.13, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 46, + "s": [203.886, 94.242, 0], + "to": [0.151, -0.13, 0], + "ti": [-0.157, 0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 47, + "s": [204.349, 93.894, 0], + "to": [0.157, -0.102, 0], + "ti": [-0.161, 0.078, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 48, + "s": [204.827, 93.632, 0], + "to": [0.161, -0.078, 0], + "ti": [-0.163, 0.067, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 49, + "s": [205.315, 93.423, 0], + "to": [0.163, -0.067, 0], + "ti": [-0.166, 0.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 50, + "s": [205.808, 93.233, 0], + "to": [0.166, -0.057, 0], + "ti": [-0.172, 0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 51, + "s": [206.31, 93.079, 0], + "to": [0.172, -0.042, 0], + "ti": [-0.179, 0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 52, + "s": [206.839, 92.979, 0], + "to": [0.179, -0.025, 0], + "ti": [-0.182, 0.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 53, + "s": [207.382, 92.928, 0], + "to": [0.182, -0.01, 0], + "ti": [-0.181, -0.005, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.168 }, + "t": 54, + "s": [207.929, 92.922, 0], + "to": [0.181, 0.005, 0], + "ti": [-0.176, -0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 55, + "s": [208.467, 92.955, 0], + "to": [0.176, 0.017, 0], + "ti": [-0.169, -0.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 56, + "s": [208.986, 93.024, 0], + "to": [0.169, 0.028, 0], + "ti": [-0.158, -0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 57, + "s": [209.478, 93.124, 0], + "to": [0.158, 0.038, 0], + "ti": [-0.145, -0.046, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 58, + "s": [209.934, 93.25, 0], + "to": [0.145, 0.046, 0], + "ti": [-0.069, -0.025, 0] + }, + { "t": 59, "s": [210.348, 93.398, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.87, 0.772, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 8, + "s": [119.453, 55.55, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.231, 0.131, 0] }, + "t": 9, + "s": [106.941, 69.697, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.287, 0.579, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.135, -0.59, 0] }, + "t": 10, + "s": [99.865, 94.324, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, 0.86, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.065, 0.104, 0] }, + "t": 11, + "s": [102.566, 91.274, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.741, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.301, 0.205, 0] }, + "t": 12, + "s": [90.563, 78.91, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.394, 1.467, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.123, -0.044, 0] }, + "t": 13, + "s": [85.972, 70.463, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, 0.973, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 0.071, 0] }, + "t": 14, + "s": [76.313, 75.971, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.334, 0.741, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.413, -0.04, 0] }, + "t": 15, + "s": [131.692, 39.582, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.923, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.067, 0.123, 0] }, + "t": 16, + "s": [145.687, 64.182, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.286, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.941, -0.085, 0] }, + "t": 17, + "s": [75.572, 116.009, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.026, 3.589, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.094, -1.303, 0] }, + "t": 18, + "s": [81.277, 90.372, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.88, 0.961, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.081, 0] }, + "t": 19, + "s": [124.472, 91.912, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.062, 0.923, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.275, -0.072, 0] }, + "t": 20, + "s": [67.544, 42.493, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.861, 1.459, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.036, -0.98, 0] }, + "t": 21, + "s": [42.728, 69.036, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 0.917, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.208, 0.071, 0] }, + "t": 22, + "s": [85.996, 66.957, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-1.537, -47.561, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.187, 74, 0] }, + "t": 23, + "s": [114.947, 80.491, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.566, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.086, 0.083, 0] }, + "t": 24, + "s": [113.049, 80.506, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.925, 0.917, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.054, 0.103, 0] }, + "t": 25, + "s": [57.15, 89.382, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.098, 5.726, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.754, -8.491, 0] }, + "t": 26, + "s": [91.118, 126.727, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.09, 0.993, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.045, 0.082, 0] }, + "t": 27, + "s": [87.736, 126.364, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.908, 0.868, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.043, -0.008, 0] }, + "t": 28, + "s": [95.097, 147.312, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.56, 0.516, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.913, 0.225, 0] }, + "t": 29, + "s": [79.819, 128.237, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.128, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.088, 0.101, 0] }, + "t": 30, + "s": [78.286, 116.992, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.612, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.051, -0.463, 0] }, + "t": 31, + "s": [51.103, 62.981, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.755, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.177, 0.106, 0] }, + "t": 32, + "s": [120.097, 71.216, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.78, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.126, -0.07, 0] }, + "t": 33, + "s": [97.985, 101.356, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.958, 0.93, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.054, 0.134, 0] }, + "t": 34, + "s": [55.144, 84.965, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.921, 0.999, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.086, -0.43, 0] }, + "t": 35, + "s": [81.051, 58.096, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.51, 1.562, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.655, -0.001, 0] }, + "t": 36, + "s": [68.289, 62.454, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.243, 1.041, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.072, 0.073, 0] }, + "t": 37, + "s": [68.9, 58.129, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.116, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, 0.028, 0] }, + "t": 38, + "s": [64.548, 91.624, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.007, 0.943, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.048, -0.49, 0] }, + "t": 39, + "s": [81.603, 41.501, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.027, -0.787, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.007, -0.185, 0] }, + "t": 40, + "s": [40.821, 48.785, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 0.981, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, 0.087, 0] }, + "t": 41, + "s": [85.22, 46.522, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.945, 1.024, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.112, -0.025, 0] }, + "t": 42, + "s": [26.513, 0.273, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.915, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.158, 0.018, 0] }, + "t": 43, + "s": [51.537, 35.891, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.358, 1.609, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.318, 4.617, 0] }, + "t": 44, + "s": [42.897, -9.828, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 0.696, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, 0.073, 0] }, + "t": 45, + "s": [44.69, -10.668, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 0.946, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.095, 0.115, 0] }, + "t": 46, + "s": [72.117, -3.689, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.789, 0.815, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.25, -0.156, 0] }, + "t": 47, + "s": [59.287, 14.778, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.827, 0.946, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.08, 0.152, 0] }, + "t": 48, + "s": [60.089, 8.351, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.698, -0.404, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.161, -0.154, 0] }, + "t": 49, + "s": [42.069, 0.529, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.95, 0.986, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, 0.089, 0] }, + "t": 50, + "s": [22.609, 3.273, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.627, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.126, -0.016, 0] }, + "t": 51, + "s": [-28.548, 46.76, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.957, 0.182, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.107, -0.67, 0] }, + "t": 52, + "s": [-8.217, 10.367, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.796, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.089, 0.093, 0] }, + "t": 53, + "s": [62.57, 14.39, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.988, 0.546, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, -0.271, 0] }, + "t": 54, + "s": [28.321, 49.863, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.858, 1, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.015, 0.102, 0] }, + "t": 55, + "s": [-21.183, 41.528, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.006, 0.962, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.202, 0, 0] }, + "t": 56, + "s": [20.981, 4.416, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.939, 0.899, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.005, -0.071, 0] }, + "t": 57, + "s": [50.62, 41.308, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.223, 0.468, 0] }, + "t": 58, + "s": [18.942, 21.34, 100] + }, + { "t": 59, "s": [27.547, 17.011, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 8, + "op": 60, + "st": 8, + "bm": 0 + }, + { + "ddd": 0, + "ind": 48, + "ty": 4, + "nm": "Shape Layer 4", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 2, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 29, + "s": [100] + }, + { "t": 45, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.599 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 2, + "s": [273.94, 260.349, 0], + "to": [-0.179, 0.314, 0], + "ti": [0.915, -1.476, 0] + }, + { + "i": { "x": 0.833, "y": 0.765 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 3, + "s": [272.864, 262.231, 0], + "to": [-0.915, 1.476, 0], + "ti": [2.375, -3.065, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 4, + "s": [268.451, 269.206, 0], + "to": [-2.375, 3.065, 0], + "ti": [3.841, -3.636, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 5, + "s": [258.614, 280.62, 0], + "to": [-3.841, 3.636, 0], + "ti": [4.317, -2.988, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 6, + "s": [245.406, 291.021, 0], + "to": [-4.317, 2.988, 0], + "ti": [3.939, -2.213, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 7, + "s": [232.715, 298.549, 0], + "to": [-3.939, 2.213, 0], + "ti": [3.368, -1.76, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 8, + "s": [221.77, 304.296, 0], + "to": [-3.368, 1.76, 0], + "ti": [2.855, -1.514, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 9, + "s": [212.51, 309.106, 0], + "to": [-2.855, 1.514, 0], + "ti": [2.434, -1.366, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 10, + "s": [204.641, 313.381, 0], + "to": [-2.434, 1.366, 0], + "ti": [2.092, -1.261, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 11, + "s": [197.904, 317.3, 0], + "to": [-2.092, 1.261, 0], + "ti": [1.81, -1.177, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 12, + "s": [192.09, 320.946, 0], + "to": [-1.81, 1.177, 0], + "ti": [1.575, -1.103, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 13, + "s": [187.044, 324.36, 0], + "to": [-1.575, 1.103, 0], + "ti": [1.376, -1.035, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 14, + "s": [182.643, 327.564, 0], + "to": [-1.376, 1.035, 0], + "ti": [1.205, -0.972, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 15, + "s": [178.791, 330.572, 0], + "to": [-1.205, 0.972, 0], + "ti": [1.057, -0.911, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [175.413, 333.393, 0], + "to": [-1.057, 0.911, 0], + "ti": [0.928, -0.852, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [172.447, 336.036, 0], + "to": [-0.928, 0.852, 0], + "ti": [0.814, -0.797, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 18, + "s": [169.845, 338.508, 0], + "to": [-0.814, 0.797, 0], + "ti": [0.712, -0.743, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [167.565, 340.816, 0], + "to": [-0.712, 0.743, 0], + "ti": [0.621, -0.692, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [165.574, 342.967, 0], + "to": [-0.621, 0.692, 0], + "ti": [0.539, -0.642, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [163.841, 344.967, 0], + "to": [-0.539, 0.642, 0], + "ti": [0.464, -0.595, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [162.342, 346.821, 0], + "to": [-0.464, 0.595, 0], + "ti": [0.397, -0.549, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 23, + "s": [161.056, 348.535, 0], + "to": [-0.397, 0.549, 0], + "ti": [0.336, -0.504, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 24, + "s": [159.962, 350.113, 0], + "to": [-0.336, 0.504, 0], + "ti": [0.28, -0.461, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 25, + "s": [159.042, 351.559, 0], + "to": [-0.28, 0.461, 0], + "ti": [0.23, -0.419, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 26, + "s": [158.282, 352.878, 0], + "to": [-0.23, 0.419, 0], + "ti": [0.185, -0.378, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 27, + "s": [157.663, 354.073, 0], + "to": [-0.185, 0.378, 0], + "ti": [0.145, -0.339, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 28, + "s": [157.172, 355.149, 0], + "to": [-0.145, 0.339, 0], + "ti": [0.11, -0.301, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 29, + "s": [156.793, 356.108, 0], + "to": [-0.11, 0.301, 0], + "ti": [0.08, -0.264, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 30, + "s": [156.511, 356.955, 0], + "to": [-0.08, 0.264, 0], + "ti": [0.054, -0.227, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 31, + "s": [156.313, 357.691, 0], + "to": [-0.054, 0.227, 0], + "ti": [0.034, -0.191, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 32, + "s": [156.184, 358.318, 0], + "to": [-0.034, 0.191, 0], + "ti": [0.018, -0.156, 0] + }, + { + "i": { "x": 0.833, "y": 0.854 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 33, + "s": [156.11, 358.839, 0], + "to": [-0.018, 0.156, 0], + "ti": [0.007, -0.122, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.194 }, + "t": 34, + "s": [156.077, 359.255, 0], + "to": [-0.007, 0.122, 0], + "ti": [-0.009, -0.098, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 35, + "s": [156.07, 359.568, 0], + "to": [0.009, 0.098, 0], + "ti": [-0.034, -0.089, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 36, + "s": [156.129, 359.841, 0], + "to": [0.034, 0.089, 0], + "ti": [-0.059, -0.084, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 37, + "s": [156.271, 360.101, 0], + "to": [0.059, 0.084, 0], + "ti": [-0.08, -0.078, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 38, + "s": [156.482, 360.344, 0], + "to": [0.08, 0.078, 0], + "ti": [-0.098, -0.071, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 39, + "s": [156.751, 360.569, 0], + "to": [0.098, 0.071, 0], + "ti": [-0.112, -0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 40, + "s": [157.068, 360.771, 0], + "to": [0.112, 0.063, 0], + "ti": [-0.124, -0.054, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 41, + "s": [157.425, 360.948, 0], + "to": [0.124, 0.054, 0], + "ti": [-0.129, -0.049, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 42, + "s": [157.811, 361.097, 0], + "to": [0.129, 0.049, 0], + "ti": [-0.126, -0.051, 0] + }, + { + "i": { "x": 0.833, "y": 0.837 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 43, + "s": [158.201, 361.241, 0], + "to": [0.126, 0.051, 0], + "ti": [-0.118, -0.056, 0] + }, + { + "i": { "x": 0.833, "y": 0.838 }, + "o": { "x": 0.167, "y": 0.171 }, + "t": 44, + "s": [158.569, 361.404, 0], + "to": [0.118, 0.056, 0], + "ti": [-0.109, -0.06, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 45, + "s": [158.91, 361.58, 0], + "to": [0.109, 0.06, 0], + "ti": [-0.098, -0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 46, + "s": [159.221, 361.765, 0], + "to": [0.098, 0.062, 0], + "ti": [-0.087, -0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 47, + "s": [159.499, 361.954, 0], + "to": [0.087, 0.063, 0], + "ti": [-0.074, -0.063, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 48, + "s": [159.741, 362.144, 0], + "to": [0.074, 0.063, 0], + "ti": [-0.062, -0.061, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 49, + "s": [159.945, 362.33, 0], + "to": [0.062, 0.061, 0], + "ti": [-0.049, -0.058, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 50, + "s": [160.111, 362.509, 0], + "to": [0.049, 0.058, 0], + "ti": [-0.036, -0.053, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 51, + "s": [160.237, 362.677, 0], + "to": [0.036, 0.053, 0], + "ti": [-0.023, -0.048, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.185 }, + "t": 52, + "s": [160.325, 362.83, 0], + "to": [0.023, 0.048, 0], + "ti": [-0.011, -0.042, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 53, + "s": [160.376, 362.965, 0], + "to": [0.011, 0.042, 0], + "ti": [0.001, -0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.187 }, + "t": 54, + "s": [160.39, 363.08, 0], + "to": [-0.001, 0.034, 0], + "ti": [0.011, -0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 55, + "s": [160.371, 363.171, 0], + "to": [-0.011, 0.026, 0], + "ti": [0.021, -0.017, 0] + }, + { + "i": { "x": 0.833, "y": 0.82 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 56, + "s": [160.322, 363.235, 0], + "to": [-0.021, 0.017, 0], + "ti": [0.029, -0.006, 0] + }, + { + "i": { "x": 0.833, "y": 0.816 }, + "o": { "x": 0.167, "y": 0.155 }, + "t": 57, + "s": [160.247, 363.27, 0], + "to": [-0.029, 0.006, 0], + "ti": [0.035, 0.004, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.152 }, + "t": 58, + "s": [160.149, 363.273, 0], + "to": [-0.035, -0.004, 0], + "ti": [0.019, 0.005, 0] + }, + { "t": 59, "s": [160.035, 363.244, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.052, 0.912, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 2, + "s": [91.411, 73.902, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.827, 0.39, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.032, 1.61, 0] }, + "t": 3, + "s": [65.83, 91.918, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.046, 1.571, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.161, 0.097, 0] }, + "t": 4, + "s": [107.448, 92.901, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.942, 0.923, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.03, 0.073, 0] }, + "t": 5, + "s": [152.078, 99.113, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.847, 0.674, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.195, -0.969, 0] }, + "t": 6, + "s": [82.703, 50.368, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.029, 0.728, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.183, 0.112, 0] }, + "t": 7, + "s": [103.48, 54.226, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.79, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.022, 0.12, 0] }, + "t": 8, + "s": [120.884, 65.462, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.94, 0.95, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.138, -0.135, 0] }, + "t": 9, + "s": [97.362, 90.861, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.855, 1.74, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.209, -0.125, 0] }, + "t": 10, + "s": [61.56, 81.156, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.023, 1.03, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.196, 0.075, 0] }, + "t": 11, + "s": [71.774, 85.037, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.369, 0.932, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.018, 0.022, 0] }, + "t": 12, + "s": [79.328, 46.686, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 0.844, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.068, -0.362, 0] }, + "t": 13, + "s": [69.652, 98.9, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.223, 1.075, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.384, 0.179, 0] }, + "t": 14, + "s": [122.192, 89.119, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.92, 0.879, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.061, 0.04, 0] }, + "t": 15, + "s": [136.768, 80.556, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.268, 1.123, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.772, 0.269, 0] }, + "t": 16, + "s": [83.231, 96.867, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.041, 0.715, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, 0.05, 0] }, + "t": 17, + "s": [85.636, 104.189, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.882, 0.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.028, 0.118, 0] }, + "t": 18, + "s": [119.843, 86.028, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.101, -1.337, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.286, -2.378, 0] }, + "t": 19, + "s": [68.608, 42.162, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.862, 0.996, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.046, 0.086, 0] }, + "t": 20, + "s": [47.52, 43.647, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.979, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.21, -0.004, 0] }, + "t": 21, + "s": [94.079, 83.818, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.63, 0.826, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.12, -0.028, 0] }, + "t": 22, + "s": [124.614, 45.446, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.959, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.108, 0.16, 0] }, + "t": 23, + "s": [112.121, 74.09, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.798, 1.043, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.082, 0.224, 0] }, + "t": 24, + "s": [69.17, 105.139, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.989, 1.056, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.142, 0.028, 0] }, + "t": 25, + "s": [90.804, 123.544, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.836, 0.968, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.013, 0.034, 0] }, + "t": 26, + "s": [121.588, 95.744, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.88, 0.908, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.17, -0.053, 0] }, + "t": 27, + "s": [95.051, 142.325, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.702, 0.553, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.275, 0.917, 0] }, + "t": 28, + "s": [69.508, 113.896, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.63, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.116, 0.102, 0] }, + "t": 29, + "s": [58.415, 111.056, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 0.97, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.069, 0.108, 0] }, + "t": 30, + "s": [29.777, 98.67, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.682, 0.963, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, -0.046, 0] }, + "t": 31, + "s": [45.407, 56.133, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.99, 0.982, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, -0.066, 0] }, + "t": 32, + "s": [34.491, 83.602, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 1.248, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.012, -0.022, 0] }, + "t": 33, + "s": [3.789, 68.283, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 0.862, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.224, 0.062, 0] }, + "t": 34, + "s": [30.69, 80.365, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.11, 1.012, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, 0.211, 0] }, + "t": 35, + "s": [46.645, 32.371, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.919, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.047, 0.011, 0] }, + "t": 36, + "s": [32.343, 1.12, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.962, 1.001, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-2.466, -0.037, 0] }, + "t": 37, + "s": [65.552, 37.014, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.026, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.087, 0.001, 0] }, + "t": 38, + "s": [64.467, 12.19, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.059, -0.017, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, -0.473, 0] }, + "t": 39, + "s": [40, 37.362, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.936, 0.93, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.034, 0.091, 0] }, + "t": 40, + "s": [72.228, 33.594, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.744, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.269, -0.441, 0] }, + "t": 41, + "s": [17.233, -8.641, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 1.149, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.124, -0.134, 0] }, + "t": 42, + "s": [30.25, -1.935, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.994, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.017, 0.053, 0] }, + "t": 43, + "s": [57.17, -4.506, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.998, 1.452, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.006, -0.034, 0] }, + "t": 44, + "s": [23.549, 2.656, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.864, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.002, 0.07, 0] }, + "t": 45, + "s": [54.911, -2.436, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.044, 1.08, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.138, 0.216, 0] }, + "t": 46, + "s": [24.231, 30.266, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.98, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.029, 0.041, 0] }, + "t": 47, + "s": [35.767, 50.837, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.284, 0.351, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.027, -0.49, 0] }, + "t": 48, + "s": [18.177, 10.486, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.93, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, 0.096, 0] }, + "t": 49, + "s": [31.443, 16.354, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.369, 0.815, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.427, -0.033, 0] }, + "t": 50, + "s": [-27.024, 56.172, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, 0.996, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, 0.152, 0] }, + "t": 51, + "s": [-17.47, 27.705, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.145, 0.868, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.306, -0.005, 0] }, + "t": 52, + "s": [45.271, -6.879, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.872, 1.081, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.053, 0.227, 0] }, + "t": 53, + "s": [68.762, 25.916, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.048, 1.039, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.239, 0.041, 0] }, + "t": 54, + "s": [4.456, 44.914, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 0.959, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.03, 0.026, 0] }, + "t": 55, + "s": [-30.068, 7.408, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.082, 0.922, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.101, -0.08, 0] }, + "t": 56, + "s": [24.371, 62.294, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 2.558, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.041, -1.19, 0] }, + "t": 57, + "s": [-0.235, 34.376, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.394, 0.079, 0] }, + "t": 58, + "s": [48.622, 36.203, 100] + }, + { "t": 59, "s": [61.716, 0.231, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 2, + "op": 60, + "st": 2, + "bm": 0 + }, + { + "ddd": 0, + "ind": 49, + "ty": 4, + "nm": "Shape Layer 3", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 34, + "s": [100] + }, + { "t": 50, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.551 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 7, + "s": [272.377, 258.087, 0], + "to": [-0.394, 0.137, 0], + "ti": [2.139, -0.681, 0] + }, + { + "i": { "x": 0.833, "y": 0.762 }, + "o": { "x": 0.167, "y": 0.102 }, + "t": 8, + "s": [270.01, 258.906, 0], + "to": [-2.139, 0.681, 0], + "ti": [5.098, -1.104, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.128 }, + "t": 9, + "s": [259.541, 262.172, 0], + "to": [-5.098, 1.104, 0], + "ti": [7.13, -0.303, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 10, + "s": [239.424, 265.531, 0], + "to": [-7.13, 0.303, 0], + "ti": [6.918, 1.295, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 11, + "s": [216.76, 263.988, 0], + "to": [-6.918, -1.295, 0], + "ti": [5.553, 2.383, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 12, + "s": [197.916, 257.762, 0], + "to": [-5.553, -2.383, 0], + "ti": [4.294, 2.71, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 13, + "s": [183.44, 249.693, 0], + "to": [-4.294, -2.71, 0], + "ti": [3.412, 2.643, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 14, + "s": [172.149, 241.499, 0], + "to": [-3.412, -2.643, 0], + "ti": [2.824, 2.427, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 15, + "s": [162.967, 233.838, 0], + "to": [-2.824, -2.427, 0], + "ti": [2.43, 2.167, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 16, + "s": [155.204, 226.937, 0], + "to": [-2.43, -2.167, 0], + "ti": [2.166, 1.903, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 17, + "s": [148.386, 220.833, 0], + "to": [-2.166, -1.903, 0], + "ti": [1.988, 1.643, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 18, + "s": [142.207, 215.519, 0], + "to": [-1.988, -1.643, 0], + "ti": [1.866, 1.384, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 19, + "s": [136.458, 210.978, 0], + "to": [-1.866, -1.384, 0], + "ti": [1.768, 1.113, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 20, + "s": [131.01, 207.214, 0], + "to": [-1.768, -1.113, 0], + "ti": [1.677, 0.828, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 21, + "s": [125.848, 204.301, 0], + "to": [-1.677, -0.828, 0], + "ti": [1.589, 0.546, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 22, + "s": [120.949, 202.245, 0], + "to": [-1.589, -0.546, 0], + "ti": [1.493, 0.277, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 23, + "s": [116.315, 201.024, 0], + "to": [-1.493, -0.277, 0], + "ti": [1.38, 0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 24, + "s": [111.993, 200.584, 0], + "to": [-1.38, -0.034, 0], + "ti": [1.254, -0.168, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [108.033, 200.82, 0], + "to": [-1.254, 0.168, 0], + "ti": [1.122, -0.322, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [104.469, 201.591, 0], + "to": [-1.122, 0.322, 0], + "ti": [0.991, -0.429, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 27, + "s": [101.304, 202.75, 0], + "to": [-0.991, 0.429, 0], + "ti": [0.869, -0.496, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 28, + "s": [98.52, 204.163, 0], + "to": [-0.869, 0.496, 0], + "ti": [0.759, -0.533, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 29, + "s": [96.088, 205.725, 0], + "to": [-0.759, 0.533, 0], + "ti": [0.662, -0.548, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.173 }, + "t": 30, + "s": [93.965, 207.359, 0], + "to": [-0.662, 0.548, 0], + "ti": [0.577, -0.547, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 31, + "s": [92.114, 209.011, 0], + "to": [-0.577, 0.547, 0], + "ti": [0.502, -0.535, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 32, + "s": [90.501, 210.642, 0], + "to": [-0.502, 0.535, 0], + "ti": [0.436, -0.515, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 33, + "s": [89.1, 212.221, 0], + "to": [-0.436, 0.515, 0], + "ti": [0.376, -0.488, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 34, + "s": [87.887, 213.729, 0], + "to": [-0.376, 0.488, 0], + "ti": [0.324, -0.458, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 35, + "s": [86.842, 215.15, 0], + "to": [-0.324, 0.458, 0], + "ti": [0.277, -0.424, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 36, + "s": [85.945, 216.475, 0], + "to": [-0.277, 0.424, 0], + "ti": [0.234, -0.388, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 37, + "s": [85.182, 217.694, 0], + "to": [-0.234, 0.388, 0], + "ti": [0.195, -0.349, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 38, + "s": [84.541, 218.8, 0], + "to": [-0.195, 0.349, 0], + "ti": [0.16, -0.31, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 39, + "s": [84.009, 219.79, 0], + "to": [-0.16, 0.31, 0], + "ti": [0.129, -0.269, 0] + }, + { + "i": { "x": 0.833, "y": 0.849 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 40, + "s": [83.578, 220.658, 0], + "to": [-0.129, 0.269, 0], + "ti": [0.099, -0.226, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.186 }, + "t": 41, + "s": [83.238, 221.401, 0], + "to": [-0.099, 0.226, 0], + "ti": [0.072, -0.183, 0] + }, + { + "i": { "x": 0.833, "y": 0.857 }, + "o": { "x": 0.167, "y": 0.19 }, + "t": 42, + "s": [82.984, 222.016, 0], + "to": [-0.072, 0.183, 0], + "ti": [0.048, -0.14, 0] + }, + { + "i": { "x": 0.833, "y": 0.865 }, + "o": { "x": 0.167, "y": 0.199 }, + "t": 43, + "s": [82.806, 222.502, 0], + "to": [-0.048, 0.14, 0], + "ti": [0.026, -0.097, 0] + }, + { + "i": { "x": 0.833, "y": 0.882 }, + "o": { "x": 0.167, "y": 0.219 }, + "t": 44, + "s": [82.697, 222.858, 0], + "to": [-0.026, 0.097, 0], + "ti": [0.005, -0.052, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.284 }, + "t": 45, + "s": [82.651, 223.082, 0], + "to": [-0.005, 0.052, 0], + "ti": [-0.014, -0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.751 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 46, + "s": [82.666, 223.173, 0], + "to": [0.014, 0.008, 0], + "ti": [-0.027, 0.032, 0] + }, + { + "i": { "x": 0.833, "y": 0.805 }, + "o": { "x": 0.167, "y": 0.125 }, + "t": 47, + "s": [82.736, 223.128, 0], + "to": [0.027, -0.032, 0], + "ti": [-0.027, 0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.812 }, + "o": { "x": 0.167, "y": 0.145 }, + "t": 48, + "s": [82.826, 222.979, 0], + "to": [0.027, -0.062, 0], + "ti": [-0.023, 0.085, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.149 }, + "t": 49, + "s": [82.9, 222.757, 0], + "to": [0.023, -0.085, 0], + "ti": [-0.025, 0.099, 0] + }, + { + "i": { "x": 0.833, "y": 0.831 }, + "o": { "x": 0.167, "y": 0.161 }, + "t": 50, + "s": [82.964, 222.469, 0], + "to": [0.025, -0.099, 0], + "ti": [-0.032, 0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.834 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 51, + "s": [83.05, 222.164, 0], + "to": [0.032, -0.102, 0], + "ti": [-0.036, 0.101, 0] + }, + { + "i": { "x": 0.833, "y": 0.836 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 52, + "s": [83.155, 221.857, 0], + "to": [0.036, -0.101, 0], + "ti": [-0.038, 0.098, 0] + }, + { + "i": { "x": 0.833, "y": 0.839 }, + "o": { "x": 0.167, "y": 0.17 }, + "t": 53, + "s": [83.269, 221.556, 0], + "to": [0.038, -0.098, 0], + "ti": [-0.038, 0.093, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.172 }, + "t": 54, + "s": [83.385, 221.268, 0], + "to": [0.038, -0.093, 0], + "ti": [-0.035, 0.085, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 55, + "s": [83.497, 221, 0], + "to": [0.035, -0.085, 0], + "ti": [-0.031, 0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 56, + "s": [83.598, 220.758, 0], + "to": [0.031, -0.076, 0], + "ti": [-0.024, 0.065, 0] + }, + { + "i": { "x": 0.833, "y": 0.853 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 57, + "s": [83.682, 220.545, 0], + "to": [0.024, -0.065, 0], + "ti": [-0.017, 0.053, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.192 }, + "t": 58, + "s": [83.745, 220.367, 0], + "to": [0.017, -0.053, 0], + "ti": [-0.006, 0.023, 0] + }, + { "t": 59, "s": [83.781, 220.227, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.852, 3.785, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 7, + "s": [121.49, 88.737, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.91, 0.921, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.19, 0.081, 0] }, + "t": 8, + "s": [91.076, 88.159, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.429, -3.486, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.162, -1.415, 0] }, + "t": 9, + "s": [67.412, 108.062, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.033, 0.953, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.098, 0.085, 0] }, + "t": 10, + "s": [65.583, 106.955, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.841, 0.807, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.024, -0.106, 0] }, + "t": 11, + "s": [54.874, 48.475, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.733, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.176, 0.146, 0] }, + "t": 12, + "s": [69.879, 74.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.032, 1.001, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.121, 0.246, 0] }, + "t": 13, + "s": [83.434, 108.14, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.978, 0.868, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.023, 0.001, 0] }, + "t": 14, + "s": [113.236, 125.507, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.937, 0.727, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.03, 0.227, 0] }, + "t": 15, + "s": [72.085, 108.002, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.63, 0.848, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.261, 0.12, 0] }, + "t": 16, + "s": [102.383, 97.845, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 0.819, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.108, 0.184, 0] }, + "t": 17, + "s": [95.054, 74.753, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.758, 1.104, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.116, 0.155, 0] }, + "t": 18, + "s": [69.833, 55.593, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.253, 0.933, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.127, 0.046, 0] }, + "t": 19, + "s": [71.585, 33.206, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.845, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, -0.336, 0] }, + "t": 20, + "s": [74.924, 83.413, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.895, 1.179, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.069, 0.18, 0] }, + "t": 21, + "s": [121.778, 73.433, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.929, 0.903, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.41, 0.057, 0] }, + "t": 22, + "s": [96.063, 64.842, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-2.344, 1.503, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.493, 0.61, 0] }, + "t": 23, + "s": [89.506, 91.864, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 1.002, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.085, 0.071, 0] }, + "t": 24, + "s": [90.453, 96.143, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.913, 0.848, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.002, 0] }, + "t": 25, + "s": [127.532, 66.021, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.203, 1.019, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.831, 0.185, 0] }, + "t": 26, + "s": [90.276, 96.965, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.094, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.059, 0.015, 0] }, + "t": 27, + "s": [88.5, 122.317, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.722, 1.067, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.044, -0.049, 0] }, + "t": 28, + "s": [94.599, 91.269, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.905, 0.958, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.119, 0.037, 0] }, + "t": 29, + "s": [81.585, 110.87, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.81, 0.948, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.689, -0.085, 0] }, + "t": 30, + "s": [51.164, 75.568, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.817, 1.401, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.148, -0.141, 0] }, + "t": 31, + "s": [46.977, 93.082, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.272, 0.996, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.153, 0.069, 0] }, + "t": 32, + "s": [41.615, 86.585, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 0.774, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.064, -0.004, 0] }, + "t": 33, + "s": [35.186, 124.337, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.499, 0.946, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.532, 0.132, 0] }, + "t": 34, + "s": [62.591, 88.269, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.951, 0.921, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.071, -0.154, 0] }, + "t": 35, + "s": [58.881, 26.321, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.072, 1.831, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.121, -1.508, 0] }, + "t": 36, + "s": [84.818, 48.109, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.946, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.038, 0.076, 0] }, + "t": 37, + "s": [74.254, 46.968, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.594, 35.497, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.15, 12.359, 0] }, + "t": 38, + "s": [93.883, 59.486, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.926, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.105, 0.083, 0] }, + "t": 39, + "s": [86.872, 59.571, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.076, 0.594, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.224, -0.643, 0] }, + "t": 40, + "s": [59.763, 24.304, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.02, 0.969, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 0.105, 0] }, + "t": 41, + "s": [43.653, 28.352, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 1.059, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, -0.049, 0] }, + "t": 42, + "s": [74.399, 44.017, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.401, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.523, 0.034, 0] }, + "t": 43, + "s": [36.198, 34.152, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.943, 0.234, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.069, 0.557, 0] }, + "t": 44, + "s": [41.448, 50.974, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.109, 1.139, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.183, 0.094, 0] }, + "t": 45, + "s": [10.923, 53.931, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.042, 0.95, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.047, 0.052, 0] }, + "t": 46, + "s": [20.467, 78.157, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.003, 0.801, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.028, -0.123, 0] }, + "t": 47, + "s": [-1.575, 13.482, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.927, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.003, 0.144, 0] }, + "t": 48, + "s": [31.467, 39.632, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.201, 0.662, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.568, -0.037, 0] }, + "t": 49, + "s": [-2.832, 75.796, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, 0.948, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.093, 0.111, 0] }, + "t": 50, + "s": [1.556, 50.773, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.966, 0.83, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.302, -0.136, 0] }, + "t": 51, + "s": [39.258, -25.561, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.108, 1.032, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.057, 0.164, 0] }, + "t": 52, + "s": [53.602, 3.457, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 1.046, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, 0.023, 0] }, + "t": 53, + "s": [45.062, 33.613, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.964, 0.941, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.07, 0.03, 0] }, + "t": 54, + "s": [-37.848, -8.287, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.116, 0.998, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.063, -0.206, 0] }, + "t": 55, + "s": [7.213, 56.765, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, 1.241, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.049, -0.003, 0] }, + "t": 56, + "s": [-18.526, 38.06, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.835, 0.935, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.416, 0.062, 0] }, + "t": 57, + "s": [43.172, 56.215, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.168, -0.296, 0] }, + "t": 58, + "s": [58.626, -14.531, 100] + }, + { "t": 59, "s": [73.773, 0.993, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.167820994059, 1, 0.160646446078, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 7, + "op": 60, + "st": 7, + "bm": 0 + }, + { + "ddd": 0, + "ind": 50, + "ty": 4, + "nm": "Shape Layer 2", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 6, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 11, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 33, + "s": [100] + }, + { "t": 49, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.592 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 6, + "s": [272.75, 257.654, 0], + "to": [0.022, 0.426, 0], + "ti": [-0.208, -2.079, 0] + }, + { + "i": { "x": 0.833, "y": 0.764 }, + "o": { "x": 0.167, "y": 0.105 }, + "t": 7, + "s": [272.88, 260.209, 0], + "to": [0.208, 2.079, 0], + "ti": [-0.762, -4.636, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.129 }, + "t": 8, + "s": [273.997, 270.127, 0], + "to": [0.762, 4.636, 0], + "ti": [-1.59, -6.205, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 9, + "s": [277.455, 288.025, 0], + "to": [1.59, 6.205, 0], + "ti": [-2.259, -5.901, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 10, + "s": [283.537, 307.355, 0], + "to": [2.259, 5.901, 0], + "ti": [-2.568, -4.763, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 11, + "s": [291.011, 323.433, 0], + "to": [2.568, 4.763, 0], + "ti": [-2.65, -3.689, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 12, + "s": [298.946, 335.933, 0], + "to": [2.65, 3.689, 0], + "ti": [-2.621, -2.842, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 13, + "s": [306.911, 345.569, 0], + "to": [2.621, 2.842, 0], + "ti": [-2.532, -2.186, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 14, + "s": [314.674, 352.986, 0], + "to": [2.532, 2.186, 0], + "ti": [-2.408, -1.678, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 15, + "s": [322.1, 358.684, 0], + "to": [2.408, 1.678, 0], + "ti": [-2.266, -1.285, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 16, + "s": [329.119, 363.056, 0], + "to": [2.266, 1.285, 0], + "ti": [-2.117, -0.981, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [335.695, 366.397, 0], + "to": [2.117, 0.981, 0], + "ti": [-1.968, -0.746, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 18, + "s": [341.819, 368.944, 0], + "to": [1.968, 0.746, 0], + "ti": [-1.824, -0.565, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [347.502, 370.875, 0], + "to": [1.824, 0.565, 0], + "ti": [-1.688, -0.424, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 20, + "s": [352.764, 372.332, 0], + "to": [1.688, 0.424, 0], + "ti": [-1.56, -0.315, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 21, + "s": [357.63, 373.419, 0], + "to": [1.56, 0.315, 0], + "ti": [-1.442, -0.23, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [362.126, 374.22, 0], + "to": [1.442, 0.23, 0], + "ti": [-1.332, -0.163, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [366.28, 374.797, 0], + "to": [1.332, 0.163, 0], + "ti": [-1.23, -0.11, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [370.118, 375.198, 0], + "to": [1.23, 0.11, 0], + "ti": [-1.135, -0.068, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [373.661, 375.459, 0], + "to": [1.135, 0.068, 0], + "ti": [-1.047, -0.035, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 26, + "s": [376.93, 375.608, 0], + "to": [1.047, 0.035, 0], + "ti": [-0.963, -0.007, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 27, + "s": [379.942, 375.666, 0], + "to": [0.963, 0.007, 0], + "ti": [-0.884, 0.016, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 28, + "s": [382.71, 375.649, 0], + "to": [0.884, -0.016, 0], + "ti": [-0.808, 0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 29, + "s": [385.245, 375.569, 0], + "to": [0.808, -0.036, 0], + "ti": [-0.736, 0.053, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 30, + "s": [387.559, 375.434, 0], + "to": [0.736, -0.053, 0], + "ti": [-0.666, 0.068, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 31, + "s": [389.659, 375.251, 0], + "to": [0.666, -0.068, 0], + "ti": [-0.598, 0.082, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 32, + "s": [391.553, 375.025, 0], + "to": [0.598, -0.082, 0], + "ti": [-0.531, 0.096, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 33, + "s": [393.245, 374.757, 0], + "to": [0.531, -0.096, 0], + "ti": [-0.471, 0.106, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 34, + "s": [394.738, 374.451, 0], + "to": [0.471, -0.106, 0], + "ti": [-0.425, 0.111, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 35, + "s": [396.069, 374.119, 0], + "to": [0.425, -0.111, 0], + "ti": [-0.387, 0.11, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 36, + "s": [397.286, 373.785, 0], + "to": [0.387, -0.11, 0], + "ti": [-0.348, 0.107, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 37, + "s": [398.388, 373.457, 0], + "to": [0.348, -0.107, 0], + "ti": [-0.31, 0.102, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 38, + "s": [399.376, 373.143, 0], + "to": [0.31, -0.102, 0], + "ti": [-0.272, 0.094, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 39, + "s": [400.249, 372.847, 0], + "to": [0.272, -0.094, 0], + "ti": [-0.233, 0.086, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 40, + "s": [401.007, 372.576, 0], + "to": [0.233, -0.086, 0], + "ti": [-0.195, 0.076, 0] + }, + { + "i": { "x": 0.833, "y": 0.851 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 41, + "s": [401.649, 372.333, 0], + "to": [0.195, -0.076, 0], + "ti": [-0.156, 0.064, 0] + }, + { + "i": { "x": 0.833, "y": 0.856 }, + "o": { "x": 0.167, "y": 0.189 }, + "t": 42, + "s": [402.175, 372.123, 0], + "to": [0.156, -0.064, 0], + "ti": [-0.118, 0.052, 0] + }, + { + "i": { "x": 0.833, "y": 0.864 }, + "o": { "x": 0.167, "y": 0.198 }, + "t": 43, + "s": [402.586, 371.947, 0], + "to": [0.118, -0.052, 0], + "ti": [-0.079, 0.039, 0] + }, + { + "i": { "x": 0.833, "y": 0.881 }, + "o": { "x": 0.167, "y": 0.215 }, + "t": 44, + "s": [402.881, 371.81, 0], + "to": [0.079, -0.039, 0], + "ti": [-0.041, 0.026, 0] + }, + { + "i": { "x": 0.833, "y": 0.888 }, + "o": { "x": 0.167, "y": 0.276 }, + "t": 45, + "s": [403.061, 371.711, 0], + "to": [0.041, -0.026, 0], + "ti": [-0.01, 0.014, 0] + }, + { + "i": { "x": 0.833, "y": 0.805 }, + "o": { "x": 0.167, "y": 0.327 }, + "t": 46, + "s": [403.128, 371.653, 0], + "to": [0.01, -0.014, 0], + "ti": [0.008, 0.004, 0] + }, + { + "i": { "x": 0.833, "y": 0.754 }, + "o": { "x": 0.167, "y": 0.145 }, + "t": 47, + "s": [403.122, 371.629, 0], + "to": [-0.008, -0.004, 0], + "ti": [0.019, -0.005, 0] + }, + { + "i": { "x": 0.833, "y": 0.789 }, + "o": { "x": 0.167, "y": 0.126 }, + "t": 48, + "s": [403.083, 371.63, 0], + "to": [-0.019, 0.005, 0], + "ti": [0.031, -0.013, 0] + }, + { + "i": { "x": 0.833, "y": 0.805 }, + "o": { "x": 0.167, "y": 0.138 }, + "t": 49, + "s": [403.008, 371.658, 0], + "to": [-0.031, 0.013, 0], + "ti": [0.042, -0.022, 0] + }, + { + "i": { "x": 0.833, "y": 0.813 }, + "o": { "x": 0.167, "y": 0.145 }, + "t": 50, + "s": [402.898, 371.711, 0], + "to": [-0.042, 0.022, 0], + "ti": [0.053, -0.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.818 }, + "o": { "x": 0.167, "y": 0.15 }, + "t": 51, + "s": [402.755, 371.79, 0], + "to": [-0.053, 0.03, 0], + "ti": [0.064, -0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.154 }, + "t": 52, + "s": [402.579, 371.893, 0], + "to": [-0.064, 0.038, 0], + "ti": [0.074, -0.045, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 53, + "s": [402.371, 372.019, 0], + "to": [-0.074, 0.045, 0], + "ti": [0.083, -0.052, 0] + }, + { + "i": { "x": 0.833, "y": 0.826 }, + "o": { "x": 0.167, "y": 0.158 }, + "t": 54, + "s": [402.135, 372.165, 0], + "to": [-0.083, 0.052, 0], + "ti": [0.091, -0.057, 0] + }, + { + "i": { "x": 0.833, "y": 0.828 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 55, + "s": [401.874, 372.329, 0], + "to": [-0.091, 0.057, 0], + "ti": [0.097, -0.062, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.162 }, + "t": 56, + "s": [401.591, 372.509, 0], + "to": [-0.097, 0.062, 0], + "ti": [0.102, -0.065, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 57, + "s": [401.29, 372.7, 0], + "to": [-0.102, 0.065, 0], + "ti": [0.106, -0.067, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 58, + "s": [400.977, 372.899, 0], + "to": [-0.106, 0.067, 0], + "ti": [0.053, -0.034, 0] + }, + { "t": 59, "s": [400.657, 373.102, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 1.088, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 6, + "s": [119.144, 105.827, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.795, 0.877, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.222, 0.043, 0] }, + "t": 7, + "s": [108.917, 89.684, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.672, 1.179, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.141, 0.257, 0] }, + "t": 8, + "s": [102.765, 122.894, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.908, 0.844, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.112, 0.057, 0] }, + "t": 9, + "s": [93.801, 138.844, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.347, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.904, 0.179, 0] }, + "t": 10, + "s": [67.511, 88.612, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.047, 0.005, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, -0.308, 0] }, + "t": 11, + "s": [64.842, 45.024, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.006, 0.93, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.03, 0.091, 0] }, + "t": 12, + "s": [46.604, 54.307, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.068, 0.682, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, -0.449, 0] }, + "t": 13, + "s": [75.236, 155.919, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.917, 0.86, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.037, 0.113, 0] }, + "t": 14, + "s": [44.513, 140.008, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [152.322, 0.967, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [270.204, 0.206, 0] }, + "t": 15, + "s": [100.175, 95.172, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.025, 0.944, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.083, -0.056, 0] }, + "t": 16, + "s": [100.192, 64.696, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.006, 0.462, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, -0.171, 0] }, + "t": 17, + "s": [68.993, 82.975, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.991, 1.026, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.006, 0.099, 0] }, + "t": 18, + "s": [109.723, 76.983, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.999, 0.913, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.01, 0.02, 0] }, + "t": 19, + "s": [65.994, 44.292, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.952, 2.661, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.001, 2.206, 0] }, + "t": 20, + "s": [105.048, 87.05, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.907, 0.908, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.115, 0.079, 0] }, + "t": 21, + "s": [66.25, 88.729, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [-0.395, 1.035, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.774, 0.85, 0] }, + "t": 22, + "s": [82.513, 53.595, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.013, 0.706, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.089, 0.024, 0] }, + "t": 23, + "s": [84.475, 49.774, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.914, 0.563, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.011, 0.116, 0] }, + "t": 24, + "s": [115.346, 55.183, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [3.517, 0.971, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.433, 0.103, 0] }, + "t": 25, + "s": [79.807, 68.878, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.948, 0.939, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.081, -0.045, 0] }, + "t": 26, + "s": [78.547, 127.052, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.885, 1.131, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.137, -0.23, 0] }, + "t": 27, + "s": [117.885, 89.313, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.672, 0.895, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.305, 0.051, 0] }, + "t": 28, + "s": [103.035, 99.348, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.965, 1.107, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.112, 0.406, 0] }, + "t": 29, + "s": [97.463, 73.594, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.366, 0.923, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.06, 0.047, 0] }, + "t": 30, + "s": [81.079, 66.939, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.944, 2.315, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.068, -1.035, 0] }, + "t": 31, + "s": [90.595, 82.121, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.794, 1.043, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.173, 0.078, 0] }, + "t": 32, + "s": [39.327, 80.989, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.967, 0.857, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.14, 0.028, 0] }, + "t": 33, + "s": [55.998, 99.978, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.774, 1.028, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.055, 0.199, 0] }, + "t": 34, + "s": [80.566, 71.181, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.053, 0.916, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.132, 0.021, 0] }, + "t": 35, + "s": [65.735, 50.454, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.93, 2.464, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.032, 17.741, 0] }, + "t": 36, + "s": [40.364, 78.153, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.919, -0.052, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.444, 0.079, 0] }, + "t": 37, + "s": [81.902, 78.284, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [8.691, 0.931, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-2.408, 0.091, 0] }, + "t": 38, + "s": [75.338, 75.857, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 0.423, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.082, -0.405, 0] }, + "t": 39, + "s": [75.557, 47.651, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.151, 1.036, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.069, 0.097, 0] }, + "t": 40, + "s": [55.074, 52.465, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.832, 0.956, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.054, 0.025, 0] }, + "t": 41, + "s": [66.306, 80.999, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.912, 0.908, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.165, -0.095, 0] }, + "t": 42, + "s": [34.754, 40.269, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.421, 1.175, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [1.584, 0.921, 0] }, + "t": 43, + "s": [2.594, 59.324, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.174, -0.146, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.07, 0.056, 0] }, + "t": 44, + "s": [0.808, 61.219, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.039, 0.948, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.056, 0.09, 0] }, + "t": 45, + "s": [11.618, 55.345, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.955, 0.744, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.027, -0.14, 0] }, + "t": 46, + "s": [-21.777, -19.555, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.083, 0.932, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.096, 0.123, 0] }, + "t": 47, + "s": [27.422, 8.427, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.896, 0.349, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.042, -0.359, 0] }, + "t": 48, + "s": [4.597, 66.513, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.087, 0.933, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.425, 0.096, 0] }, + "t": 49, + "s": [50.12, 55.561, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.942, 0.784, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.043, -0.354, 0] }, + "t": 50, + "s": [61.217, -19.054, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.717, 1.007, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.186, 0.136, 0] }, + "t": 51, + "s": [38.47, -4.836, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.956, 1.072, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.075, 0.006, 0] }, + "t": 52, + "s": [45.499, 17.824, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.926, 0.911, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.092, 0.039, 0] }, + "t": 53, + "s": [-22.007, -6.623, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.362, 0.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.679, 1.237, 0] }, + "t": 54, + "s": [10.024, 38.847, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.873, -34.653, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.068, -2.841, 0] }, + "t": 55, + "s": [6.522, 42.131, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.708, 0.925, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.243, 0.084, 0] }, + "t": 56, + "s": [25.242, 42.037, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.976, -0.201, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.117, -0.791, 0] }, + "t": 57, + "s": [35.027, 2.106, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.034, 0.09, 0] }, + "t": 58, + "s": [59.478, 5.911, 100] + }, + { "t": 59, "s": [42.168, 56.973, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 6, + "op": 60, + "st": 6, + "bm": 0 + }, + { + "ddd": 0, + "ind": 51, + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 3, + "s": [0] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 8, + "s": [100] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 30, + "s": [100] + }, + { "t": 46, "s": [0] } + ], + "ix": 11 + }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.625 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 3, + "s": [273.808, 259.665, 0], + "to": [0.527, -0.068, 0], + "ti": [-2.371, 0.302, 0] + }, + { + "i": { "x": 0.833, "y": 0.767 }, + "o": { "x": 0.167, "y": 0.107 }, + "t": 4, + "s": [276.968, 259.259, 0], + "to": [2.371, -0.302, 0], + "ti": [-5.103, 0.961, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.13 }, + "t": 5, + "s": [288.032, 257.854, 0], + "to": [5.103, -0.961, 0], + "ti": [-6.631, 2.225, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 6, + "s": [307.589, 253.495, 0], + "to": [6.631, -2.225, 0], + "ti": [-5.809, 3.598, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 7, + "s": [327.818, 244.501, 0], + "to": [5.809, -3.598, 0], + "ti": [-3.886, 4.355, 0] + }, + { + "i": { "x": 0.833, "y": 0.847 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 8, + "s": [342.441, 231.905, 0], + "to": [3.886, -4.355, 0], + "ti": [-2.267, 4.355, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.183 }, + "t": 9, + "s": [351.136, 218.373, 0], + "to": [2.267, -4.355, 0], + "ti": [-1.31, 3.958, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.181 }, + "t": 10, + "s": [356.042, 205.774, 0], + "to": [1.31, -3.958, 0], + "ti": [-0.831, 3.49, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 11, + "s": [358.996, 194.624, 0], + "to": [0.831, -3.49, 0], + "ti": [-0.612, 3.067, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 12, + "s": [361.029, 184.836, 0], + "to": [0.612, -3.067, 0], + "ti": [-0.528, 2.704, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 13, + "s": [362.67, 176.222, 0], + "to": [0.528, -2.704, 0], + "ti": [-0.514, 2.391, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 14, + "s": [364.195, 168.613, 0], + "to": [0.514, -2.391, 0], + "ti": [-0.538, 2.117, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 15, + "s": [365.753, 161.877, 0], + "to": [0.538, -2.117, 0], + "ti": [-0.583, 1.874, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 16, + "s": [367.425, 155.911, 0], + "to": [0.583, -1.874, 0], + "ti": [-0.636, 1.65, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 17, + "s": [369.252, 150.634, 0], + "to": [0.636, -1.65, 0], + "ti": [-0.685, 1.438, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 18, + "s": [371.238, 146.01, 0], + "to": [0.685, -1.438, 0], + "ti": [-0.735, 1.242, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 19, + "s": [373.362, 142.007, 0], + "to": [0.735, -1.242, 0], + "ti": [-0.783, 1.066, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 20, + "s": [375.646, 138.557, 0], + "to": [0.783, -1.066, 0], + "ti": [-0.813, 0.905, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 21, + "s": [378.057, 135.612, 0], + "to": [0.813, -0.905, 0], + "ti": [-0.823, 0.759, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 22, + "s": [380.527, 133.13, 0], + "to": [0.823, -0.759, 0], + "ti": [-0.814, 0.633, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 23, + "s": [382.995, 131.056, 0], + "to": [0.814, -0.633, 0], + "ti": [-0.791, 0.525, 0] + }, + { + "i": { "x": 0.833, "y": 0.84 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 24, + "s": [385.412, 129.334, 0], + "to": [0.791, -0.525, 0], + "ti": [-0.756, 0.434, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.174 }, + "t": 25, + "s": [387.738, 127.909, 0], + "to": [0.756, -0.434, 0], + "ti": [-0.712, 0.358, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 26, + "s": [389.945, 126.733, 0], + "to": [0.712, -0.358, 0], + "ti": [-0.664, 0.295, 0] + }, + { + "i": { "x": 0.833, "y": 0.841 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 27, + "s": [392.013, 125.763, 0], + "to": [0.664, -0.295, 0], + "ti": [-0.613, 0.243, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.175 }, + "t": 28, + "s": [393.931, 124.963, 0], + "to": [0.613, -0.243, 0], + "ti": [-0.561, 0.201, 0] + }, + { + "i": { "x": 0.833, "y": 0.842 }, + "o": { "x": 0.167, "y": 0.176 }, + "t": 29, + "s": [395.694, 124.303, 0], + "to": [0.561, -0.201, 0], + "ti": [-0.508, 0.165, 0] + }, + { + "i": { "x": 0.833, "y": 0.843 }, + "o": { "x": 0.167, "y": 0.177 }, + "t": 30, + "s": [397.298, 123.76, 0], + "to": [0.508, -0.165, 0], + "ti": [-0.456, 0.135, 0] + }, + { + "i": { "x": 0.833, "y": 0.844 }, + "o": { "x": 0.167, "y": 0.178 }, + "t": 31, + "s": [398.744, 123.313, 0], + "to": [0.456, -0.135, 0], + "ti": [-0.404, 0.11, 0] + }, + { + "i": { "x": 0.833, "y": 0.845 }, + "o": { "x": 0.167, "y": 0.179 }, + "t": 32, + "s": [400.032, 122.948, 0], + "to": [0.404, -0.11, 0], + "ti": [-0.352, 0.089, 0] + }, + { + "i": { "x": 0.833, "y": 0.846 }, + "o": { "x": 0.167, "y": 0.18 }, + "t": 33, + "s": [401.165, 122.652, 0], + "to": [0.352, -0.089, 0], + "ti": [-0.302, 0.071, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.182 }, + "t": 34, + "s": [402.144, 122.415, 0], + "to": [0.302, -0.071, 0], + "ti": [-0.253, 0.055, 0] + }, + { + "i": { "x": 0.833, "y": 0.85 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 35, + "s": [402.975, 122.228, 0], + "to": [0.253, -0.055, 0], + "ti": [-0.207, 0.041, 0] + }, + { + "i": { "x": 0.833, "y": 0.853 }, + "o": { "x": 0.167, "y": 0.188 }, + "t": 36, + "s": [403.664, 122.085, 0], + "to": [0.207, -0.041, 0], + "ti": [-0.163, 0.029, 0] + }, + { + "i": { "x": 0.833, "y": 0.859 }, + "o": { "x": 0.167, "y": 0.193 }, + "t": 37, + "s": [404.217, 121.981, 0], + "to": [0.163, -0.029, 0], + "ti": [-0.119, 0.018, 0] + }, + { + "i": { "x": 0.833, "y": 0.868 }, + "o": { "x": 0.167, "y": 0.203 }, + "t": 38, + "s": [404.639, 121.911, 0], + "to": [0.119, -0.018, 0], + "ti": [-0.078, 0.008, 0] + }, + { + "i": { "x": 0.833, "y": 0.887 }, + "o": { "x": 0.167, "y": 0.226 }, + "t": 39, + "s": [404.934, 121.872, 0], + "to": [0.078, -0.008, 0], + "ti": [-0.038, -0.001, 0] + }, + { + "i": { "x": 0.833, "y": 0.82 }, + "o": { "x": 0.167, "y": 0.317 }, + "t": 40, + "s": [405.107, 121.862, 0], + "to": [0.038, 0.001, 0], + "ti": [0, -0.01, 0] + }, + { + "i": { "x": 0.833, "y": 0.714 }, + "o": { "x": 0.167, "y": 0.155 }, + "t": 41, + "s": [405.163, 121.879, 0], + "to": [0, 0.01, 0], + "ti": [0.036, -0.018, 0] + }, + { + "i": { "x": 0.833, "y": 0.805 }, + "o": { "x": 0.167, "y": 0.118 }, + "t": 42, + "s": [405.107, 121.921, 0], + "to": [-0.036, 0.018, 0], + "ti": [0.064, -0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.829 }, + "o": { "x": 0.167, "y": 0.146 }, + "t": 43, + "s": [404.945, 121.988, 0], + "to": [-0.064, 0.025, 0], + "ti": [0.075, -0.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.83 }, + "o": { "x": 0.167, "y": 0.163 }, + "t": 44, + "s": [404.725, 122.069, 0], + "to": [-0.075, 0.028, 0], + "ti": [0.078, -0.03, 0] + }, + { + "i": { "x": 0.833, "y": 0.832 }, + "o": { "x": 0.167, "y": 0.164 }, + "t": 45, + "s": [404.495, 122.157, 0], + "to": [-0.078, 0.03, 0], + "ti": [0.079, -0.032, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.165 }, + "t": 46, + "s": [404.258, 122.252, 0], + "to": [-0.079, 0.032, 0], + "ti": [0.08, -0.034, 0] + }, + { + "i": { "x": 0.833, "y": 0.835 }, + "o": { "x": 0.167, "y": 0.166 }, + "t": 47, + "s": [404.019, 122.352, 0], + "to": [-0.08, 0.034, 0], + "ti": [0.078, -0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.852 }, + "o": { "x": 0.167, "y": 0.169 }, + "t": 48, + "s": [403.781, 122.458, 0], + "to": [-0.078, 0.036, 0], + "ti": [0.065, -0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.858 }, + "o": { "x": 0.167, "y": 0.191 }, + "t": 49, + "s": [403.552, 122.57, 0], + "to": [-0.065, 0.038, 0], + "ti": [0.039, -0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.848 }, + "o": { "x": 0.167, "y": 0.201 }, + "t": 50, + "s": [403.392, 122.685, 0], + "to": [-0.039, 0.038, 0], + "ti": [0.013, -0.038, 0] + }, + { + "i": { "x": 0.833, "y": 0.823 }, + "o": { "x": 0.167, "y": 0.184 }, + "t": 51, + "s": [403.315, 122.8, 0], + "to": [-0.013, 0.038, 0], + "ti": [-0.011, -0.037, 0] + }, + { + "i": { "x": 0.833, "y": 0.81 }, + "o": { "x": 0.167, "y": 0.157 }, + "t": 52, + "s": [403.314, 122.914, 0], + "to": [0.011, 0.037, 0], + "ti": [-0.033, -0.036, 0] + }, + { + "i": { "x": 0.833, "y": 0.812 }, + "o": { "x": 0.167, "y": 0.148 }, + "t": 53, + "s": [403.381, 123.025, 0], + "to": [0.033, 0.036, 0], + "ti": [-0.052, -0.035, 0] + }, + { + "i": { "x": 0.833, "y": 0.817 }, + "o": { "x": 0.167, "y": 0.15 }, + "t": 54, + "s": [403.509, 123.131, 0], + "to": [0.052, 0.035, 0], + "ti": [-0.069, -0.033, 0] + }, + { + "i": { "x": 0.833, "y": 0.821 }, + "o": { "x": 0.167, "y": 0.153 }, + "t": 55, + "s": [403.692, 123.233, 0], + "to": [0.069, 0.033, 0], + "ti": [-0.084, -0.031, 0] + }, + { + "i": { "x": 0.833, "y": 0.824 }, + "o": { "x": 0.167, "y": 0.156 }, + "t": 56, + "s": [403.923, 123.328, 0], + "to": [0.084, 0.031, 0], + "ti": [-0.096, -0.028, 0] + }, + { + "i": { "x": 0.833, "y": 0.827 }, + "o": { "x": 0.167, "y": 0.159 }, + "t": 57, + "s": [404.195, 123.417, 0], + "to": [0.096, 0.028, 0], + "ti": [-0.107, -0.025, 0] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.16 }, + "t": 58, + "s": [404.501, 123.497, 0], + "to": [0.107, 0.025, 0], + "ti": [-0.056, -0.012, 0] + }, + { "t": 59, "s": [404.836, 123.569, 0] } + ], + "ix": 2, + "l": 2 + }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1, "l": 2 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.013, 0.991, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.167, 0] }, + "t": 3, + "s": [94.174, 88.68, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.854, 0.871, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.011, -0.01, 0] }, + "t": 4, + "s": [62.657, 103.74, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1, 0.874, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.195, 0.236, 0] }, + "t": 5, + "s": [98.913, 90.256, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.962, 1.852, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0, 0.247, 0] }, + "t": 6, + "s": [126.059, 82.91, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.12, 0.944, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.071, 0.076, 0] }, + "t": 7, + "s": [99.016, 79.175, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.877, 0.719, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.049, -0.167, 0] }, + "t": 8, + "s": [113.623, 121.094, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.808, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.258, 0.118, 0] }, + "t": 9, + "s": [77.907, 107.132, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.024, 1.089, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.147, 0.166, 0] }, + "t": 10, + "s": [60.895, 73.957, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.02, 0.864, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.019, 0.043, 0] }, + "t": 11, + "s": [38.746, 40.656, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.997, 1.04, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, 0.216, 0] }, + "t": 12, + "s": [67.397, 109.363, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.787, 0.879, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.003, 0.027, 0] }, + "t": 13, + "s": [31.725, 152.383, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.983, 0.979, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.137, 0.27, 0] }, + "t": 14, + "s": [66.258, 88.662, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.996, 0.751, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.021, -0.027, 0] }, + "t": 15, + "s": [119.803, 60.228, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.949, 1.058, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.004, 0.125, 0] }, + "t": 16, + "s": [76.922, 81.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.975, 0.91, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.135, 0.034, 0] }, + "t": 17, + "s": [117.696, 124.097, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.215, 1.712, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.036, 1.154, 0] }, + "t": 18, + "s": [102.098, 51.832, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.928, 0.975, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.06, 0.075, 0] }, + "t": 19, + "s": [113.025, 46.206, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.706, 0.89, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.543, -0.036, 0] }, + "t": 20, + "s": [73.843, 99.907, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.753, 0.976, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.116, 0.341, 0] }, + "t": 21, + "s": [79.054, 62.467, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.064, 0.498, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.126, -0.035, 0] }, + "t": 22, + "s": [92.238, 50.379, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.883, 0.885, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.036, 0.1, 0] }, + "t": 23, + "s": [118.149, 58.916, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.141, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.287, 0.3, 0] }, + "t": 24, + "s": [72.379, 101.804, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.893, 0.826, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.052, -0.015, 0] }, + "t": 25, + "s": [53.668, 118.311, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.925, 1.044, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.378, 0.16, 0] }, + "t": 26, + "s": [103.965, 104.335, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.059, 1.06, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.756, 0.029, 0] }, + "t": 27, + "s": [118.191, 89.162, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.036, 0.944, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.091, 0.035, 0] }, + "t": 28, + "s": [116.779, 112.396, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.158, 1.215, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.025, -0.166, 0] }, + "t": 29, + "s": [102.243, 72.439, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 0.987, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.055, 0.06, 0] }, + "t": 30, + "s": [123.077, 85.771, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.064, 0.868, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.435, -0.015, 0] }, + "t": 31, + "s": [62.652, 37.969, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.949, 1.055, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.036, 0.226, 0] }, + "t": 32, + "s": [48.316, 78.523, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.545, 0.919, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.131, 0.033, 0] }, + "t": 33, + "s": [73.718, 102.173, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.979, -0.741, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.102, -2.641, 0] }, + "t": 34, + "s": [63.843, 62.973, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.921, 1.048, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.028, 0.088, 0] }, + "t": 35, + "s": [19.791, 64.173, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.758, 0.937, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-1.621, 0.03, 0] }, + "t": 36, + "s": [52.853, 88.034, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.306, 0.9, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.127, -0.264, 0] }, + "t": 37, + "s": [51.236, 50.431, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.889, -0.258, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.065, 0.495, 0] }, + "t": 38, + "s": [48.161, 59.44, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.538, 1.041, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.334, 0.089, 0] }, + "t": 39, + "s": [62.531, 61.263, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.759, 0.854, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.072, 0.027, 0] }, + "t": 40, + "s": [67.316, 86.954, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.954, 1.042, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.127, 0.194, 0] }, + "t": 41, + "s": [31.655, 48.638, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.875, 0.994, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.1, 0.028, 0] }, + "t": 42, + "s": [-35.843, 19.827, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.076, 0.824, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.249, -0.007, 0] }, + "t": 43, + "s": [-5.221, 63.199, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.027, 0.939, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.04, 0.158, 0] }, + "t": 44, + "s": [10.17, 23.011, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 0.602, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.02, -0.226, 0] }, + "t": 45, + "s": [-19.321, -21.801, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.313, 0.928, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.321, 0.105, 0] }, + "t": 46, + "s": [19.702, -9.718, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.894, 0.502, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.066, -0.533, 0] }, + "t": 47, + "s": [11.661, 35.883, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.021, 0.956, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.392, 0.1, 0] }, + "t": 48, + "s": [49.934, 29.715, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.685, 0.902, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.016, -0.095, 0] }, + "t": 49, + "s": [60.278, -1.013, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.849, 1.927, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.549, 0] }, + "t": 50, + "s": [47.382, 13.308, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.934, 1.073, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.187, 0.076, 0] }, + "t": 51, + "s": [11.559, 15.87, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.35, 0.905, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.311, 0.039, 0] }, + "t": 52, + "s": [-17.364, -15.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.953, 1.167, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.096, 0.662, 0] }, + "t": 53, + "s": [-11.255, 42.917, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.05, 0.864, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.107, 0.056, 0] }, + "t": 54, + "s": [30.321, 51.283, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.897, 1.071, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.031, 0.214, 0] }, + "t": 55, + "s": [12.149, 26.161, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.244, 0.929, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.44, 0.038, 0] }, + "t": 56, + "s": [41.324, 10.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.878, 0.901, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, -0.468, 0] }, + "t": 57, + "s": [48.144, 39.687, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.833, 0.833, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.262, 0.526, 0] }, + "t": 58, + "s": [21.344, 35.23, 100] + }, + { "t": 59, "s": [8.869, 34.392, 100] } + ], + "ix": 6, + "l": 2 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.937255021638, 0.019608000213, 0.513725968903, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3, + "op": 60, + "st": 3, + "bm": 0 + } + ], + "markers": [] +} diff --git a/app/animations/finish-lesson-modal-top.json b/app/animations/finish-lesson-modal-top.json new file mode 100644 index 0000000000..1d40f27bd6 --- /dev/null +++ b/app/animations/finish-lesson-modal-top.json @@ -0,0 +1,2495 @@ +{ + "v": "5.5.7", + "meta": { "g": "LottieFiles AE 0.1.20", "a": "", "k": "", "d": "", "tc": "" }, + "fr": 25, + "ip": 0, + "op": 96, + "w": 300, + "h": 300, + "nm": "Celebrate", + "ddd": 0, + "assets": [ + { + "id": "comp_0", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 0, + "nm": "Confetti Precomp", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [150, 150, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 300, + "h": 300, + "ip": 81, + "op": 108, + "st": 81, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 0, + "nm": "Confetti Precomp", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [150, 150, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 300, + "h": 300, + "ip": 72, + "op": 108, + "st": 72, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 0, + "nm": "Confetti Precomp", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [150, 150, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 300, + "h": 300, + "ip": 57, + "op": 148, + "st": 57, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 0, + "nm": "Confetti Precomp", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [150, 150, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 300, + "h": 300, + "ip": 46, + "op": 137, + "st": 46, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 0, + "nm": "Confetti Precomp", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [150, 150, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 300, + "h": 300, + "ip": 37, + "op": 128, + "st": 37, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 0, + "nm": "Confetti Precomp", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [150, 150, 0], "ix": 1 }, + "s": { "a": 0, "k": [-100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 300, + "h": 300, + "ip": 22, + "op": 113, + "st": 22, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 0, + "nm": "Confetti Precomp", + "refId": "comp_1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [150, 150, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "w": 300, + "h": 300, + "ip": 13, + "op": 104, + "st": 13, + "bm": 0 + } + ] + }, + { + "id": "comp_1", + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "confetti6", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 3, + "s": [0] + }, + { "t": 91, "s": [247] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 3, + "s": [173.77, -199.23, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 91, "s": [173.77, 356.71, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-94.5, -57.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.916, 0.864, 5.167] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.167, 0.167, -16.667] + }, + "t": 3, + "s": [-118.885, 122.108, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [1.057, 0.884, 1] }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.249, 0.18, -12.5] + }, + "t": 5.2, + "s": [-114.412, 118.297, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.746, 1.014, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.062, 0.205, 0] }, + "t": 11.8, + "s": [-109.9, 109.713, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.836, 0.788, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.124, 0.012, 0] }, + "t": 27.2, + "s": [-119.542, 98.334, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.884, 0.818, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.178, 0.095, 0] }, + "t": 42.6, + "s": [-139.282, 111.658, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.9, 0.849, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.195, 0.162, 0] }, + "t": 47, + "s": [-144.478, 120.163, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.636, 0.84, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.484, 0.209, 0] }, + "t": 60.2, + "s": [-153.789, 148.782, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.821, 0.928, -2.031] + }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.092, 0.177, 0] }, + "t": 66.8, + "s": [-152.831, 159.155, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.833, 0.833, -15.667] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.164, 0.237, 13.636] + }, + "t": 71.2, + "s": [-150.297, 165.417, 100] + }, + { "t": 91, "s": [-137.905, 173.93, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.136747397628, 0.493156881893, 0.894117647059, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-94.5, -57.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3, + "op": 91, + "st": 3, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "confetti5", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 3, + "s": [0] + }, + { "t": 91, "s": [247] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 3, + "s": [84.45, -134.55, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 91, "s": [84.45, 369.03, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-94.5, -57.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.849, 0.841, 12.458] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.167, 0.167, -16.667] + }, + "t": 3, + "s": [-88.952, 84.797, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.859, 0.841, 1] }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.218, 0.187, -5.208] + }, + "t": 27.2, + "s": [-180.111, 155.166, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [2.47, 0.852, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [2.265, 0.22, 0] }, + "t": 38.2, + "s": [-208.75, 182.271, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.8, 0.855, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.136, 0.171, 0] }, + "t": 40.4, + "s": [-209.106, 186.185, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.826, 0.949, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.117, 0.269, 0] }, + "t": 51.4, + "s": [-189.928, 203.083, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.848, -1.352, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.163, -1.251, 0] }, + "t": 55.8, + "s": [-176.814, 206.719, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.853, 0.794, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.191, 0.074, 0] }, + "t": 64.6, + "s": [-148.869, 206.422, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.922, 0.819, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.209, 0.129, 0] }, + "t": 71.2, + "s": [-132.24, 199.393, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [1.226, 0.842, -8.524] + }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.387, 0.16, 0] }, + "t": 75.6, + "s": [-124.479, 191.92, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.833, 0.833, -15.666] + }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.05, 0.18, 7.142] }, + "t": 84.4, + "s": [-121.35, 175.043, 100] + }, + { "t": 91, "s": [-131.899, 163.965, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.996078431373, 0.372549019608, 0.333333333333, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-94.5, -57.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 3, + "op": 91, + "st": 3, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "confetti4", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { "t": 91, "s": [247] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [283.54, -167.34, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 91, "s": [283.54, 309.18, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-94.5, -57.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.837, 0.838, 12.11] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.167, 0.167, -16.667] + }, + "t": 0, + "s": [122.92, 119.765, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.864, 0.852, 1] }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.176, 0.178, -5.556] + }, + "t": 4.55, + "s": [106.543, 139.931, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.886, 0.859, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.188, 0.178, 0] }, + "t": 6.825, + "s": [98.964, 149.117, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.977, 0.855, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.313, 0.205, 0] }, + "t": 11.375, + "s": [88.027, 164.36, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.566, 0.886, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.031, 0.196, 0] }, + "t": 15.925, + "s": [84.052, 174.835, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.787, 1.021, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.118, 0.242, 0] }, + "t": 20.475, + "s": [86.951, 182.572, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.837, 0.756, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.15, 0.03, 0] }, + "t": 27.3, + "s": [102.907, 188.021, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.867, 0.812, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.178, 0.085, 0] }, + "t": 40.95, + "s": [148.131, 180.526, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.875, 0.838, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.19, 0.158, 0] }, + "t": 45.5, + "s": [161.966, 173.4, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.984, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.492, 0.177, 0] }, + "t": 54.6, + "s": [181.353, 156.436, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.437, 0.935, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.019, 0.224, 0] }, + "t": 59.15, + "s": [183.818, 148.687, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.808, -0.349, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, -5.534, 0] }, + "t": 63.7, + "s": [181.819, 144.103, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.843, 1.441, -4.555] + }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.147, 0.089, 0] }, + "t": 70.525, + "s": [166.93, 144.185, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.833, 0.833, -15.667] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.172, 0.099, 11.112] + }, + "t": 77.35, + "s": [147.433, 145.421, 100] + }, + { "t": 91, "s": [111.898, 134.368, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.136747397628, 0.493156881893, 0.894117647059, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-94.5, -57.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 91, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "confetti3", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { "t": 91, "s": [247] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [206.98, -111.9, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 91, "s": [206.98, 319.74, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-94.5, -57.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.843, 0.823, 14.333] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.167, 0.167, -16.667] + }, + "t": 0, + "s": [134.589, 182.186, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.889, 0.86, 1] }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.217, 0.136, -3.333] + }, + "t": 18.2, + "s": [162.075, 146.516, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.933, 0.882, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.251, 0.191, 0] }, + "t": 22.75, + "s": [167.052, 134.918, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.491, 1.165, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.135, 0.447, 0] }, + "t": 29.575, + "s": [170.341, 122.182, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.807, 0.799, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.115, 0.071, 0] }, + "t": 34.125, + "s": [169.252, 119.951, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.821, 0.835, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.118, 0.11, 0] }, + "t": 40.95, + "s": [162.032, 127.715, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.832, 0.835, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.156, 0.169, 0] }, + "t": 43.225, + "s": [158.108, 132.465, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.947, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.165, 0.169, 0] }, + "t": 45.5, + "s": [153.599, 137.105, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.835, 0.934, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.167, 0.212, 0] }, + "t": 47.775, + "s": [148.994, 141.625, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.84, 0.796, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.176, -0.025, 0] }, + "t": 70.525, + "s": [105.016, 152.924, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.843, 0.83, -6.143] + }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.171, 0.149, 0] }, + "t": 75.075, + "s": [96.757, 146.972, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.833, 0.833, -15.666] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.175, 0.164, 9.524] + }, + "t": 81.9, + "s": [85.151, 134.737, 100] + }, + { "t": 91, "s": [71.298, 117.862, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.894117647059, 0.601497276157, 0.136747397628, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-94.5, -57.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 91, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "confetti2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { "t": 91, "s": [247] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [109.5, -49.5, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 91, "s": [109.5, 311.5, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-94.5, -57.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.936, 1.447, 9.333] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.167, 0.167, -16.667] + }, + "t": 0, + "s": [124.649, 105.825, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.809, 0.813, 1] }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [-0.28, 0.07, -8.333] + }, + "t": 6.825, + "s": [129.007, 104.254, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.884, 0.832, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.121, 0.126, 0] }, + "t": 13.65, + "s": [128.008, 114.249, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.68, 0.867, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.183, 0.166, 0] }, + "t": 15.925, + "s": [127.481, 119.169, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.695, 0.936, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.113, 0.223, 0] }, + "t": 27.3, + "s": [125.808, 144.081, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.788, 0.433, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.121, -0.475, 0] }, + "t": 38.675, + "s": [121.06, 158.958, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.836, 0.843, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.137, 0.098, 0] }, + "t": 52.325, + "s": [106.658, 156.568, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.962, 1.015, -0.515] + }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.187, 0.265, 0] }, + "t": 65.975, + "s": [84.401, 142.685, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.833, 0.833, -15.667] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.252, 0.075, 15.151] + }, + "t": 68.25, + "s": [81.162, 141.317, 100] + }, + { "t": 91, "s": [76.27, 144.027, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.136747397628, 0.493156881893, 0.894117647059, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-94.5, -57.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 91, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "confetti1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 0, + "s": [0] + }, + { "t": 91, "s": [247] } + ], + "ix": 10 + }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [51.5, -7.5, 0], + "to": [0, 0, 0], + "ti": [0, 0, 0] + }, + { "t": 91, "s": [51.5, 319.5, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [-94.5, -57.5, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.67, 0.847, 13.963] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.167, 0.167, -16.667] + }, + "t": 0, + "s": [152.068, 131.189, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.8, 0.89, 1] }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.061, 0.245, -3.704] + }, + "t": 15.925, + "s": [149.6, 158.285, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.812, 0.974, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.15, 0.255, 0] }, + "t": 20.475, + "s": [145.786, 163.112, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.863, 0.672, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.153, -0.055, 0] }, + "t": 27.3, + "s": [138.158, 166.226, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.971, 0.873, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.213, 0.112, 0] }, + "t": 36.4, + "s": [125.674, 164.249, 100] + }, + { + "i": { "x": [0.833, 0.833, 0.833], "y": [0.755, 0.822, 1] }, + "o": { "x": [0.167, 0.167, 0.167], "y": [-0.077, 0.21, 0] }, + "t": 45.5, + "s": [117.622, 158.444, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.923, 0.658, -1.381] + }, + "o": { "x": [0.167, 0.167, 0.167], "y": [0.085, 0.14, 0] }, + "t": 59.15, + "s": [122.176, 153.157, 100] + }, + { + "i": { + "x": [0.833, 0.833, 0.833], + "y": [0.833, 0.833, -15.667] + }, + "o": { + "x": [0.167, 0.167, 0.167], + "y": [0.207, 0.154, 14.286] + }, + "t": 63.7, + "s": [126.548, 150.926, 100] + }, + { "t": 91, "s": [136.282, 121.107, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "s": { "a": 0, "k": [10, 10], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 4 }, + "nm": "Rectangle Path 1", + "mn": "ADBE Vector Shape - Rect", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.894117647059, 0.601497276157, 0.136747397628, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-94.5, -57.5], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Rectangle 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 91, + "st": 0, + "bm": 0 + } + ] + } + ], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "mask", + "td": 1, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { "a": 0, "k": [90, 90, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [300, 300], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.980392216701, 0.713725490196, 0.290196078431, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 3, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.996078431373, 0.372549019608, 0.333333333333, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 250, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 0, + "nm": "Confettis", + "tt": 1, + "refId": "comp_0", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [150, 150, 0], "ix": 1 }, + "s": { "a": 0, "k": [75, 75, 100], "ix": 6 } + }, + "ao": 0, + "w": 300, + "h": 300, + "ip": -11, + "op": 97, + "st": -11, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "line6", + "parent": 9, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [31.394, -13.941, 0], "ix": 2 }, + "a": { "a": 0, "k": [25, -13.634, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-17, -27] + ], + "o": [ + [0, 0], + [17, 27] + ], + "v": [ + [-6.5, -6.5], + [56.5, -9.5] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.36862745098, 0.627450980392, 0.854902020623, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 3, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.283], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 56, + "s": [0] + }, + { "t": 68, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.248], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 50, + "s": [0] + }, + { "t": 61, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 49, + "op": 98, + "st": 28, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "line5", + "parent": 9, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [49.894, -35.005, 0], "ix": 2 }, + "a": { "a": 0, "k": [47, -31.698, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-31.5, -28] + ], + "o": [ + [0, 0], + [31.5, 28] + ], + "v": [ + [-4.5, -6], + [98.5, -51] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.992156922583, 0.768627510819, 0.341176470588, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 3, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.283], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 59, + "s": [0] + }, + { "t": 71, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.248], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 53, + "s": [0] + }, + { "t": 64, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 53, + "op": 98, + "st": 41, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "line4", + "parent": 9, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [2.892, -42.057, 0], "ix": 2 }, + "a": { "a": 0, "k": [-0.002, -38.75, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [21, 21] + ], + "o": [ + [0, 0], + [-21, -21] + ], + "v": [ + [-7, -6.5], + [-1, -71] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.996078012504, 0.372548989689, 0.333332974303, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 3, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.283], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 54, + "s": [0] + }, + { "t": 66, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.248], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 48, + "s": [0] + }, + { "t": 59, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 48, + "op": 98, + "st": 43, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "line3", + "parent": 9, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [31.394, -13.941, 0], "ix": 2 }, + "a": { "a": 0, "k": [25, -13.634, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-17, -27] + ], + "o": [ + [0, 0], + [17, 27] + ], + "v": [ + [-6.5, -6.5], + [56.5, -9.5] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.36862745098, 0.627450980392, 0.854902020623, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 3, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.283], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 15, + "s": [0] + }, + { "t": 27, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.248], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [0] + }, + { "t": 20, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 8, + "op": 62, + "st": -13, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "line2", + "parent": 9, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [49.894, -35.005, 0], "ix": 2 }, + "a": { "a": 0, "k": [47, -31.698, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [-31.5, -28] + ], + "o": [ + [0, 0], + [31.5, 28] + ], + "v": [ + [-4.5, -6], + [98.5, -51] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.992156922583, 0.768627510819, 0.341176470588, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 3, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.283], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 18, + "s": [0] + }, + { "t": 30, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.248], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 12, + "s": [0] + }, + { "t": 23, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 12, + "op": 75, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 8, + "ty": 4, + "nm": "line1", + "parent": 9, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [2.892, -42.057, 0], "ix": 2 }, + "a": { "a": 0, "k": [-0.002, -38.75, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 0], + [21, 21] + ], + "o": [ + [0, 0], + [-21, -21] + ], + "v": [ + [-7, -6.5], + [-1, -71] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.996078012504, 0.372548989689, 0.333332974303, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 3, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 4, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "tm", + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.283], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13, + "s": [0] + }, + { "t": 25, "s": [100] } + ], + "ix": 1 + }, + "e": { + "a": 1, + "k": [ + { + "i": { "x": [0.248], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [0] + }, + { "t": 18, "s": [100] } + ], + "ix": 2 + }, + "o": { "a": 0, "k": 0, "ix": 3 }, + "m": 1, + "ix": 2, + "nm": "Trim Paths 1", + "mn": "ADBE Vector Filter - Trim", + "hd": false + } + ], + "ip": 7, + "op": 77, + "st": 2, + "bm": 0 + }, + { + "ddd": 0, + "ind": 9, + "ty": 4, + "nm": "cone", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.133], "y": [0.908] }, + "o": { "x": [0.333], "y": [0] }, + "t": 5, + "s": [94] + }, + { + "i": { "x": [0.833], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 15, + "s": [0] + }, + { + "i": { "x": [0.371], "y": [1] }, + "o": { "x": [0.606], "y": [0] }, + "t": 31, + "s": [0] + }, + { + "i": { "x": [0.106], "y": [1] }, + "o": { "x": [0.167], "y": [-0.007] }, + "t": 47, + "s": [83] + }, + { "t": 58, "s": [0] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [-7.083, -1.688, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 3, + "s": [0, 0, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 13, + "s": [135, 135, 100] + }, + { + "i": { "x": [0.667, 0.667, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 22, + "s": [100, 100, 100] + }, + { + "i": { "x": [0.389, 0.389, 0.667], "y": [0.952, 0.952, -1.353] }, + "o": { "x": [0.399, 0.399, 0.333], "y": [0, 0, 0] }, + "t": 33, + "s": [120, 120, 100] + }, + { + "i": { "x": [0, 0, 0.667], "y": [1.12, 1.12, 1] }, + "o": { "x": [0.274, 0.274, 0.333], "y": [-0.033, -0.033, 2.858] }, + "t": 47, + "s": [74.045, 74.045, 100] + }, + { "t": 64, "s": [110.374, 110.374, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0, 6.125], + [-6.589, -1.04], + [8.625, 1.25] + ], + "o": [ + [-1.5, 0], + [9.5, 1.5], + [-8.625, -1.25] + ], + "v": [ + [-16.5, -21], + [-25, 17.5], + [12.207, 2.481] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.980392216701, 0.713725490196, 0.290196078431, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + }, + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [14.75, 38.25], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "fl", + "c": { + "a": 0, + "k": [0.894117647059, 0.601497276157, 0.136747397628, 1], + "ix": 4 + }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [-1.125, -9.125], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": -50, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 0, + "op": 98, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 10, + "ty": 4, + "nm": "circle 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.245, 0.245, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 4, + "s": [0, 0, 100] + }, + { "t": 19, "s": [50, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [300, 300], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [0.980392216701, 0.713725490196, 0.290196078431, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.249], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 4, + "s": [10] + }, + { "t": 19, "s": [0] } + ], + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 4, + "op": 22, + "st": 4, + "bm": 0 + }, + { + "ddd": 0, + "ind": 11, + "ty": 4, + "nm": "circle", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [150, 150, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { + "a": 1, + "k": [ + { + "i": { "x": [0.245, 0.245, 0.667], "y": [1, 1, 1] }, + "o": { "x": [0.333, 0.333, 0.333], "y": [0, 0, 0] }, + "t": 1, + "s": [0, 0, 100] + }, + { "t": 16, "s": [50, 50, 100] } + ], + "ix": 6 + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "d": 1, + "ty": "el", + "s": { "a": 0, "k": [300, 300], "ix": 2 }, + "p": { "a": 0, "k": [0, 0], "ix": 3 }, + "nm": "Ellipse Path 1", + "mn": "ADBE Vector Shape - Ellipse", + "hd": false + }, + { + "ty": "st", + "c": { + "a": 0, + "k": [1, 0.52549013624, 0.52549013624, 1], + "ix": 3 + }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { + "a": 1, + "k": [ + { + "i": { "x": [0.249], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 1, + "s": [10] + }, + { "t": 16, "s": [0] } + ], + "ix": 5 + }, + "lc": 2, + "lj": 2, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform" + } + ], + "nm": "Ellipse 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false + } + ], + "ip": 1, + "op": 22, + "st": 1, + "bm": 0 + } + ], + "markers": [] +} diff --git a/app/css/bootcamp/components/solve-exercise-page.css b/app/css/bootcamp/components/solve-exercise-page.css index 506c726870..f98fd6a138 100644 --- a/app/css/bootcamp/components/solve-exercise-page.css +++ b/app/css/bootcamp/components/solve-exercise-page.css @@ -1,4 +1,4 @@ -#solve-exercise-page { +#bootcamp-solve-exercise-page { .scenario-lhs { @apply w-[50%] max-w-[350px]; @apply flex-shrink-0; diff --git a/app/css/bootcamp/exercises/draw.css b/app/css/bootcamp/exercises/draw.css index ffcb93f8ae..2f28a3dd29 100644 --- a/app/css/bootcamp/exercises/draw.css +++ b/app/css/bootcamp/exercises/draw.css @@ -1,4 +1,4 @@ -#solve-exercise-page { +#bootcamp-solve-exercise-page { .exercise-draw { @apply border-1 border-gray-500; .bg-grid { diff --git a/app/helpers/react_components/bootcamp/solve_exercise_page.rb b/app/helpers/react_components/bootcamp/solve_exercise_page.rb new file mode 100644 index 0000000000..2a7ee65801 --- /dev/null +++ b/app/helpers/react_components/bootcamp/solve_exercise_page.rb @@ -0,0 +1,59 @@ +module ReactComponents + class Bootcamp::SolveExercisePage < ReactComponent + initialize_with :solution + + def to_s + super(id, data) + end + + def id = "bootcamp-solve-exercise-page" + + def data + { + project: { slug: project.slug }, + exercise: { + id: exercise.id, + slug: exercise.slug, + introduction_html: exercise.introduction_html, + tasks: exercise.tasks, + config: { + title: exercise.config[:title], + description: exercise.config[:description], + project_type: exercise.config[:project_type], + tests_type: exercise.config[:tests_type] + }, + test_results: submission&.test_results + }, + solution: { + uuid: solution.uuid, + status: solution.status + }, + test_results: submission&.test_results, + code: { + # rename to `value` or similar? code.code is a bit confusing + code: submission ? submission.code : exercise.stub, + stored_at: submission&.created_at, + readonly_ranges: + }, + links: { + # post_submission: Exercism::Routes.api_solution_submissions_url(solution_uuid: solution.uuid, only_path: true), + # complete_solution: Exercism::Routes.complete_api_solution_url(solution.uuid, only_path: true), + projects_index: Exercism::Routes.bootcamp_projects_url(only_path: true) + } + } + end + + private + def readonly_ranges + return submission.readonly_ranges if submission + + exercise.readonly_ranges + end + + memoize + def submission = solution.submissions.last + + delegate :exercise, to: :solution + delegate :project, to: :exercise + end +end diff --git a/app/javascript/components/bootcamp/SolveExercisePage/AnimationTimeline/AnimationTimeline.ts b/app/javascript/components/bootcamp/SolveExercisePage/AnimationTimeline/AnimationTimeline.ts new file mode 100644 index 0000000000..38b4e8e23b --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/AnimationTimeline/AnimationTimeline.ts @@ -0,0 +1,159 @@ +import { type Frame } from '@/interpreter/frames' +import anime, { type AnimeInstance, type AnimeTimelineInstance } from 'animejs' +import type { AnimeCSSProperties } from './types' + +export type Animation = anime.AnimeAnimParams & { + offset: string | number | undefined + transformations: AnimeCSSProperties +} + +export class AnimationTimeline { + private animationTimeline: AnimeTimelineInstance + private currentIndex: number = 0 + public currentFrame?: Frame + public previousFrame?: Frame | null + public nextFrame?: Frame | null + public progress: number = 0 + private updateCallbacks: ((anim: AnimeInstance) => void)[] = [] + + constructor(initialOptions: anime.AnimeParams, private frames: Frame[] = []) { + this.animationTimeline = anime.timeline({ + easing: 'linear', + ...initialOptions, + update: (anim: AnimeInstance) => { + this.updateScrubber(anim) + this.updateCallbacks.forEach((cb) => cb(anim)) + }, + }) + } + + public onUpdate(callback: (anim: AnimeInstance) => void) { + this.updateCallbacks.push(callback) + } + + public removeUpdateCallback(callback: (anim: AnimeInstance) => void) { + this.updateCallbacks = this.updateCallbacks.filter((cb) => cb !== callback) + } + + public populateTimeline(animations: Animation[]) { + animations.forEach((animation: Animation) => { + this.animationTimeline.add( + { ...animation, ...animation.transformations }, + animation.offset + ) + }) + + /* + ensure the last frame is included in the timeline duration, even if it's not an animation. + anime timeline only cares about animations when calculating duration + and if the last frame is not an animation, it will not be included in the duration. + + example: + - the total animation duration is 60ms + - a new frame is added after the animation, incrementing time by 1ms (see Executor.addFrame - executor.ts#L868). + - the last frame is now at time 61ms, but the timeline duration remains 60ms because the last frame is not animated. + - this discrepancy prevents seeking to the last frame (time 61ms) as the timeline caps at 60ms. + */ + + /* + on the other hand ensure the full duration of the last animation is present. hence the max function. + */ + + const animationDurationAfterAnimations = this.animationTimeline.duration + this.animationTimeline.duration = Math.max( + animationDurationAfterAnimations, + this.frames[this.frames.length - 1].time + ) + return this + } + + public get timeline() { + return this.animationTimeline + } + + public get duration() { + return this.animationTimeline.duration + } + + private updateScrubber(anim: AnimeInstance) { + this.progress = anim.currentTime + + const reversedIndex = this.frames + .slice() + .reverse() + .findIndex((frame) => { + return frame.time <= this.progress + }) + + this.currentIndex = this.frames.length - 1 - reversedIndex + + this.currentFrame = this.frames[this.currentIndex] + + this.previousFrame = + this.currentIndex > 0 ? this.frames[this.currentIndex - 1] : null + + this.nextFrame = + this.currentIndex < this.frames.length - 1 + ? this.frames[this.currentIndex + 1] + : null + } + + public getProgress() { + return this.progress + } + + public getCurrentFrame() { + return this.currentFrame + } + + public get currentFrameIndex() { + return this.currentIndex + } + + public get framesLength() { + return this.frames.length + } + + public seekFirstFrame() { + this.animationTimeline.seek(0) + } + + public seekLastFrame() { + this.animationTimeline.seek(this.frames[this.frames.length - 1].time) + } + + public seekEndOfTimeline() { + this.animationTimeline.seek(this.animationTimeline.duration) + } + + public getFrames() { + return this.frames + } + public seek(time: number) { + this.animationTimeline.seek(time) + } + + public play() { + this.animationTimeline.play() + } + + public pause() { + this.animationTimeline.pause() + } + + public get paused(): boolean { + return this.animationTimeline.paused + } + + public get completed(): boolean { + return this.animationTimeline.completed + } + + public restart() { + this.animationTimeline.restart() + } + + public reverse() { + this.animationTimeline.reverse() + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/AnimationTimeline/types.ts b/app/javascript/components/bootcamp/SolveExercisePage/AnimationTimeline/types.ts new file mode 100644 index 0000000000..2f8d06aa8c --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/AnimationTimeline/types.ts @@ -0,0 +1,32 @@ +export type AnimeCSSProperties = { + opacity?: number + translateX?: string | number + translateY?: string | number + translateZ?: string | number + rotate?: string | number + rotateX?: string | number + rotateY?: string | number + rotateZ?: string | number + scale?: string | number + scaleX?: string | number + scaleY?: string | number + scaleZ?: string | number + skew?: string | number + skewX?: string | number + skewY?: string | number + color?: string + backgroundColor?: string + background?: string + borderWidth?: string | number + borderColor?: string + margin?: string | number + padding?: string | number + width?: string | number + height?: string | number + top?: string | number + right?: string | number + bottom?: string | number + left?: string | number + perspective?: string | number + boxShadow?: string +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx new file mode 100644 index 0000000000..e39eea9ab1 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx @@ -0,0 +1,228 @@ +import React, { + useState, + useEffect, + forwardRef, + type ForwardedRef, +} from 'react' +import { EditorView, ViewUpdate } from '@codemirror/view' +import { EditorState, Compartment } from '@codemirror/state' +import { minimalSetup } from 'codemirror' +import { indentWithTab } from '@codemirror/commands' +import { + keymap, + highlightActiveLine, + dropCursor, + rectangularSelection, + crosshairCursor, + lineNumbers, + highlightActiveLineGutter, +} from '@codemirror/view' +import { + indentOnInput, + bracketMatching, + foldKeymap, +} from '@codemirror/language' +import { defaultKeymap, historyKeymap } from '@codemirror/commands' +import { searchKeymap } from '@codemirror/search' +import { lintKeymap } from '@codemirror/lint' +import { javascript } from '@codemirror/lang-javascript' + +import useEditorStore from '../store/editorStore' + +import * as Ext from './extensions' +import * as Hook from './hooks' +import { INFO_HIGHLIGHT_COLOR } from './extensions/lineHighlighter' + +export const readonlyCompartment = new Compartment() + +export type Handler = { + setValue: (value: string) => void + getValue: () => string + focus: () => void +} + +export type ViewRef = React.MutableRefObject + +function onEditorChange(...cb: Array<(update: ViewUpdate) => void>) { + return EditorView.updateListener.of((update) => { + if (update.docChanged) { + cb.forEach((fn) => fn(update)) + } + }) +} + +function onEditorFocus(...cb: Array<(update: ViewUpdate) => void>) { + return EditorView.updateListener.of((update) => { + if (update.view.hasFocus) { + cb.forEach((fn) => fn(update)) + } + }) +} + +export const CodeMirror = forwardRef(function _CodeMirror( + { + editorDidMount, + handleRunCode, + style, + }: { + editorDidMount: (handler: Handler) => void + handleRunCode: () => void + style?: React.CSSProperties + }, + ref: ForwardedRef +) { + const { + readonly, + defaultCode, + setHasCodeBeenEdited, + shouldShowInformationWidget, + underlineRange, + setUnderlineRange, + setHighlightedLineColor, + setShouldShowInformationWidget, + highlightedLineColor, + setHighlightedLine, + highlightedLine, + informationWidgetData, + setInformationWidgetData, + } = useEditorStore() + + const [textarea, setTextarea] = useState(null) + + let value = defaultCode + + const getEditorView = (): EditorView | null => { + if (typeof ref === 'function') { + throw new Error('Callback refs are not supported.') + } + if (ref === null) return null + return ref.current + } + + const setValue = (text: string) => { + const editorView = getEditorView() + if (!editorView) { + return + } + + const transaction = editorView.state.update({ + changes: { + from: 0, + to: editorView.state.doc.length, + insert: text, + }, + }) + + editorView.dispatch(transaction) + } + + const getValue = () => { + const editorView = getEditorView() + return (value = editorView?.state.doc.toString() || '') + } + + useEffect(() => { + if (!textarea || getEditorView()) { + return + } + + const view = new EditorView({ + state: EditorState.create({ + doc: value, + extensions: [ + Ext.underlineExtension(), + Ext.readOnlyRangeDecoration(), + Ext.colorScheme, + minimalSetup, + lineNumbers(), + highlightActiveLineGutter(), + dropCursor(), + EditorState.allowMultipleSelections.of(true), + indentOnInput(), + bracketMatching(), + rectangularSelection(), + crosshairCursor(), + highlightActiveLine(), + keymap.of([ + ...defaultKeymap, + ...searchKeymap, + ...historyKeymap, + ...foldKeymap, + ...lintKeymap, + indentWithTab, + ]), + javascript(), + Ext.highlightLine(highlightedLine), + Ext.showInfoWidgetField, + Ext.informationWidgetDataField, + Ext.lineInformationExtension(), + Ext.multiHighlightLine({ from: 0, to: 0 }), + readonlyCompartment.of([EditorView.editable.of(!readonly)]), + onEditorFocus( + () => setShouldShowInformationWidget(false), + () => + setInformationWidgetData({ + html: '', + line: 0, + status: 'SUCCESS', + }) + ), + onEditorChange( + () => setHighlightedLine(0), + () => setHighlightedLineColor(INFO_HIGHLIGHT_COLOR), + () => setHasCodeBeenEdited(true), + () => setUnderlineRange(undefined), + () => { + const { shouldAutoRunCode } = useEditorStore.getState() + if (shouldAutoRunCode) { + handleRunCode() + } + } + ), + Ext.cursorTooltip(), + Ext.highlightedCodeBlock(), + Ext.initReadOnlyRangesExtension(), + ], + }), + parent: textarea, + }) + + if (typeof ref === 'function') { + throw new Error('Callback refs are not supported.') + } else if (ref) { + ref.current = view + } + + editorDidMount({ setValue, getValue, focus: view.focus.bind(view) }) + }) + + Hook.useReadonlyCompartment(getEditorView(), readonly) + + Hook.useHighlightLine(getEditorView(), highlightedLine) + Hook.useHighlightLineColor(getEditorView(), highlightedLineColor) + Hook.useUnderlineRange(getEditorView(), underlineRange) + // Hook.useReadonlyRanges(getEditorView(), readonlyRanges); + + useEffect(() => { + const editorView = getEditorView() + if (!editorView || shouldShowInformationWidget === undefined) return + editorView.dispatch({ + effects: Ext.showInfoWidgetEffect.of(shouldShowInformationWidget), + }) + }, [shouldShowInformationWidget]) + + useEffect(() => { + const editorView = getEditorView() + if (!editorView || informationWidgetData === undefined) return + + editorView.dispatch({ + effects: Ext.informationWidgetDataEffect.of(informationWidgetData), + }) + }, [informationWidgetData?.html, informationWidgetData?.line]) + + return ( +
+
+
+ ) +}) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/clean-up-editor.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/clean-up-editor.ts new file mode 100644 index 0000000000..34947c2a9c --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/clean-up-editor.ts @@ -0,0 +1,15 @@ +import { StateEffect } from '@codemirror/state' +import type { EditorView } from 'codemirror' + +// This can be added to any extension that needs to be cleaned up. e.g. underlineRange, highlightLine, etc +export const cleanUpEditorEffect = StateEffect.define() + +/** + * Cleans up the editor by removing all decorations and marks. + */ +export function cleanUpEditor(view: EditorView | null) { + if (!view) return + view.dispatch({ + effects: cleanUpEditorEffect.of(), + }) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/colorScheme.d.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/colorScheme.d.ts new file mode 100644 index 0000000000..e9912e4988 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/colorScheme.d.ts @@ -0,0 +1 @@ +export declare const colorScheme: import('@codemirror/state').Extension diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/colorScheme.js b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/colorScheme.js new file mode 100644 index 0000000000..de1c0768f2 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/colorScheme.js @@ -0,0 +1,70 @@ +import { tags as t } from '@lezer/highlight' +import createTheme from './create-theme.js' +// uses createTheme by Chris Kempson +export const colorScheme = createTheme({ + variant: 'light', + settings: { + background: '#FFFFFF', + foreground: '#4D4D4C', + caret: '#AEAFAD', + gutterBackground: '#FFFFFF', + gutterForeground: '#4D4D4C80', + lineHighlight: '#D6ECFA80', + selection: '#D5D1F2', + selectionMatch: '#D5D1F2', + }, + styles: [ + { + tag: t.comment, + color: '#B1BBC4', + }, + { + tag: [t.variableName, t.propertyName, t.attributeName, t.regexp], + color: '#019da4', + }, + { + tag: [t.paren, t.brace], + color: '#8A99A6', + fontWeight: 600, + }, + { + tag: [t.number, t.bool, t.null], + color: '#FF5792', + }, + { + tag: [t.className, t.typeName, t.definition(t.typeName)], + color: '#C99E00', + }, + { + tag: [t.string, t.special(t.brace)], + color: '#38AD6D', + }, + { + tag: t.operator, + color: '#3E999F', + }, + { + tag: [t.definition(t.propertyName), t.function(t.variableName)], + color: '#0081fc', + }, + { + tag: t.keyword, + color: '#25B6A7', + }, + { + tag: t.operatorKeyword, + color: '#73abeb', + }, + + { + tag: t.controlKeyword, + color: '#A626A4', + fontWeight: 500, + }, + + { + tag: t.derefOperator, + color: '#4D4D4C', + }, + ], +}) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/create-theme.d.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/create-theme.d.ts new file mode 100644 index 0000000000..c3ffa7a485 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/create-theme.d.ts @@ -0,0 +1,49 @@ +import { Extension } from '@codemirror/state' +import { TagStyle } from '@codemirror/language' +interface Options { + /** + * Theme variant. Determines which styles CodeMirror will apply by default. + */ + variant: Variant + /** + * Settings to customize the look of the editor, like background, gutter, selection and others. + */ + settings: Settings + /** + * Syntax highlighting styles. + */ + styles: TagStyle[] +} +declare type Variant = 'light' | 'dark' +interface Settings { + /** + * Editor background. + */ + background: string + /** + * Default text color. + */ + foreground: string + /** + * Caret color. + */ + caret: string + /** + * Selection background. + */ + selection: string + /** + * Background of highlighted lines. + */ + lineHighlight: string + /** + * Gutter background. + */ + gutterBackground: string + /** + * Text color inside gutter. + */ + gutterForeground: string +} +declare const createTheme: ({ variant, settings, styles }: Options) => Extension +export default createTheme diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/create-theme.js b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/create-theme.js new file mode 100644 index 0000000000..bdc5853d33 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/create-theme/create-theme.js @@ -0,0 +1,43 @@ +import { EditorView } from '@codemirror/view' +import { HighlightStyle, syntaxHighlighting } from '@codemirror/language' +const createTheme = ({ variant, settings, styles }) => { + const theme = EditorView.theme( + { + '&': { + backgroundColor: settings.background, + color: settings.foreground, + }, + '.cm-content': { + caretColor: settings.caret, + }, + '.cm-cursor, .cm-dropCursor': { + borderLeftColor: settings.caret, + }, + '.cm-activeLine': { + backgroundColor: settings.lineHighlight, + }, + '.cm-selectionMatch': { + backgroundColor: settings.selectionMatch, + }, + '&.cm-focused .cm-selectionBackground .cm-selectionBackground, .cm-content ::selection': + { + backgroundColor: settings.selection + ' !important', + }, + + '.cm-gutters': { + backgroundColor: settings.gutterBackground, + color: settings.gutterForeground, + }, + '.cm-activeLineGutter': { + backgroundColor: settings.lineHighlight, + }, + }, + { + dark: variant === 'dark', + } + ) + const highlightStyle = HighlightStyle.define(styles) + const extension = [theme, syntaxHighlighting(highlightStyle)] + return extension +} +export default createTheme diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/customCursor.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/customCursor.ts new file mode 100644 index 0000000000..3443d9f311 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/customCursor.ts @@ -0,0 +1,76 @@ +import { EditorView, type Tooltip, showTooltip } from '@codemirror/view' +import { EditorState, StateEffect, StateField } from '@codemirror/state' + +export const showTutorTooltip = StateEffect.define() +interface TooltipState { + visible: boolean + tooltips: readonly Tooltip[] +} + +export const cursorTooltipField = StateField.define({ + create(state) { + return { visible: false, tooltips: getCursorTooltips(state) } + }, + + update(value, tr) { + let showTutorEffect = tr.effects.find((e) => e.is(showTutorTooltip)) + const newTooltip = { ...value } + + if (showTutorEffect !== undefined) { + newTooltip.visible = showTutorEffect.value + } + + if (newTooltip.visible || tr.docChanged || tr.selection) { + newTooltip.tooltips = getCursorTooltips(tr.state) + } else { + newTooltip.tooltips = [] + } + + return newTooltip + }, + + provide: (f) => + showTooltip.computeN([f], (state) => { + const { visible, tooltips } = state.field(f) + return visible ? tooltips : [] + }), +}) + +function getCursorTooltips(state: EditorState): readonly Tooltip[] { + return state.selection.ranges + .filter((range) => range.empty) + .map((range) => { + return { + pos: range.head, + above: true, + strictSide: false, + arrow: true, + create: () => { + let dom = document.createElement('div') + dom.innerHTML = ` + + ` + dom.className = 'cm-tooltip-cursor' + return { dom } + }, + } + }) +} + +const cursorTooltipBaseTheme = EditorView.baseTheme({ + '.cm-tooltip.cm-tooltip-cursor': { + background: '#4B8C9C', + padding: '2px', + borderRadius: '8px', + '& .cm-tooltip-arrow:before': { + borderTopColor: '#4B8C9C', + }, + '& .cm-tooltip-arrow:after': { + borderTopColor: 'transparent', + }, + }, +}) + +export function cursorTooltip() { + return [cursorTooltipField, cursorTooltipBaseTheme] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/highlightRange.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/highlightRange.ts new file mode 100644 index 0000000000..5cab2eb7ba --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/highlightRange.ts @@ -0,0 +1,46 @@ +import { Decoration, type DecorationSet, EditorView } from '@codemirror/view' +import { StateEffect, StateField } from '@codemirror/state' + +export const addHighlight = StateEffect.define<{ from: number; to: number }>({ + map: ({ from, to }, change) => ({ + from: change.mapPos(from), + to: change.mapPos(to), + }), +}) +export const removeAllHighlightEffect = StateEffect.define({}) + +export const highlightField = StateField.define({ + create() { + return Decoration.none + }, + update(highlights, tr) { + if (tr.effects.some((e) => e.is(removeAllHighlightEffect))) { + return Decoration.none + } + + highlights = highlights.map(tr.changes) + for (let e of tr.effects) + if (e.is(addHighlight)) { + highlights = highlights.update({ + add: [highlightMark.range(e.value.from, e.value.to)], + }) + } + return highlights + }, + provide: (f) => EditorView.decorations.from(f), +}) + +const highlightMark = Decoration.mark({ class: 'cm-highlighted-code' }) + +export const highlightTheme = EditorView.baseTheme({ + '.cm-highlighted-code': { + background: '#C2DEF3', + border: '1px solid #2E57E8', + borderRadius: '4px', + padding: '2px', + }, +}) + +export function highlightedCodeBlock() { + return [highlightTheme, highlightField] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/processActionsSequentially.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/processActionsSequentially.ts new file mode 100644 index 0000000000..08349c927b --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/processActionsSequentially.ts @@ -0,0 +1,122 @@ +import React from 'react' +import { EditorView } from '@codemirror/view' +import { + addCodeToEndOfLine, + removeLineContent, + removeLine, + highlightCodeSelection, + removeAllHighlights, + markLinesAsReadonly, + revertLinesToEditable, + typeOutCode, + backspaceLines, + deleteEditorContent, + placeCursor, + highlightEditorContent, +} from './utils' +import { showTutorTooltip } from './customCursor' +import { EditEditorActions } from './processActionsSequentially.types' + +const processedUuids: string[] = [] + +export async function processActionsSequentially( + viewRef: React.MutableRefObject, + editEditorActions: EditEditorActions | undefined, + uuid: string +): Promise { + if ( + !editEditorActions || + editEditorActions.actions.length === 0 || + processedUuids.includes(uuid) + ) + return + + processedUuids.push(uuid) + + for (const action of editEditorActions.actions) { + try { + switch (action.type) { + case 'type-out-code': + await typeOutCode(viewRef.current!, action) + break + case 'remove-line': + await removeLine(viewRef.current!, action) + break + case 'push-code': + await addCodeToEndOfLine(viewRef.current!, action) + break + case 'remove-line-content': + await removeLineContent(viewRef.current!, action) + break + case 'highlight-code': + await highlightCodeSelection(viewRef.current!, action) + break + case 'remove-highlighting': + await removeAllHighlights(viewRef.current!) + break + case 'mark-lines-as-readonly': + await markLinesAsReadonly(viewRef.current!, action.ranges) + break + case 'revert-lines-to-editable': + await revertLinesToEditable(viewRef.current!) + break + case 'backspace-lines': + await backspaceLines(viewRef.current!, action) + break + case 'delete-editor-content': + await deleteEditorContent(viewRef.current!) + break + case 'highlight-editor-content': + await highlightEditorContent(viewRef.current!) + break + case 'place-cursor': + await placeCursor(viewRef.current!, { + line: action.line, + char: action.char, + }) + break + } + + // fixed delay between actions? + await new Promise((resolve) => setTimeout(resolve, 500)) + } catch (e) { + console.error("Couldn't process things:", e) + } + } + + viewRef.current?.dispatch({ effects: showTutorTooltip.of(false) }) +} + +// actions examples + +// const [id] = useState(uuid()); +// const obj: EditEditorActions = { +// uuid: id, +// actions: [ +// { +// type: "type-out-code", +// line: 4, +// code: "// You can leave a comment like this", +// }, +// { type: "remove-line-content", line: 4 }, +// { +// type: "type-out-code", +// line: 4, +// code: "// Now it's your turn.", +// }, +// { type: "remove-line-content", line: 4 }, +// { type: "highlight-code", from: 0, to: 10 }, +// { type: "remove-highlighting" }, +// { +// type: "mark-lines-as-readonly", +// ranges: [ +// { from: 1, to: 3 }, +// { from: 6, to: 6 }, +// { from: 11, to: 11 }, +// ], +// }, +// { +// type: "revert-lines-to-editable", +// }, +// ], +// }; diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/processActionsSequentially.types.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/processActionsSequentially.types.ts new file mode 100644 index 0000000000..0cb24cf7cd --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/processActionsSequentially.types.ts @@ -0,0 +1,69 @@ +type AddContent = { + type: 'type-out-code' | 'push-code' + line: number + code: string +} + +type MarkLinesAsReadonly = { + type: 'mark-lines-as-readonly' + ranges: { from: number; to: number }[] +} + +type RemoveContent = { + type: 'remove-line-content' | 'remove-line' + line: number +} + +type BackspaceLines = { + type: 'backspace-lines' + from: number + to: number +} + +type HighlightCode = { + type: 'highlight-code' + regex: string + ignoreCase?: boolean + lines?: { + from: number + to: number + } +} + +type RemoveHighlighting = { + type: 'remove-highlighting' +} +type RevertLinesToEditable = { + type: 'revert-lines-to-editable' +} + +type DeleteEditorContent = { + type: 'delete-editor-content' +} + +type HighlightEditorContent = { + type: 'highlight-editor-content' +} + +type PlaceCursor = { + type: 'place-cursor' + line: number + char: number +} + +export type EditEditorActions = { + uuid: string + async: boolean + actions: ( + | AddContent + | RemoveContent + | BackspaceLines + | HighlightCode + | RemoveHighlighting + | MarkLinesAsReadonly + | RevertLinesToEditable + | DeleteEditorContent + | HighlightEditorContent + | PlaceCursor + )[] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/utils.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/utils.ts new file mode 100644 index 0000000000..b5159e853e --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/edit-editor/utils.ts @@ -0,0 +1,319 @@ +import { EditorView } from '@codemirror/view' +import { showTutorTooltip } from './customCursor' +import { addHighlight, removeAllHighlightEffect } from './highlightRange' +import { updateReadOnlyRangesEffect } from '../read-only-ranges/readOnlyRanges' +import { RegExpCursor } from '@codemirror/search' +import { changeMultiLineHighlightEffect } from '../multiLineHighlighter' + +export function addCodeToEndOfLine( + view: EditorView, + { line, code }: { line: number; code: string } +): Promise { + return new Promise((resolve) => { + const lineObj = view.state.doc.line(line) + const pos = lineObj.to + view.dispatch({ + changes: { from: pos, insert: code }, + }) + resolve() + }) +} + +function randomNumberBetween(min: number, max: number): number { + return Math.random() * (max - min) + min +} +export function typeOutCode( + view: EditorView, + { line, code }: { line: number; code: string } +): Promise { + return new Promise((resolve) => { + const lineObj = view.state.doc.line(line) + let pos = lineObj.to + let index = 0 + + view.focus() + // move to the desired line first, and then show the tooltip + view.dispatch({ + selection: { anchor: pos, head: pos }, + effects: showTutorTooltip.of(true), + }) + + const typeChar = () => { + if (index < code.length) { + const char = code.charAt(index) + + view.dispatch({ + changes: { from: pos, insert: char }, + selection: { anchor: pos + 1, head: pos + 1 }, + }) + + pos += 1 + index += 1 + + const interval = randomNumberBetween(30, 200) + + setTimeout(typeChar, interval) + } else { + resolve() + } + } + + setTimeout(typeChar, 100) + }) +} + +export function backspaceLines( + view: EditorView, + { from, to }: { from: number; to: number } +): Promise { + return new Promise((resolve) => { + const startPosObj = view.state.doc.line(from) + const endPosObj = view.state.doc.line(to) + let posStart = startPosObj.from + let posEnd = endPosObj.to + + view.focus() + // move to the desired line first, and then show the tooltip + view.dispatch({ + selection: { anchor: posEnd, head: posEnd }, + effects: showTutorTooltip.of(true), + }) + + const deleteChar = () => { + if (posStart < posEnd) { + view.dispatch({ + changes: { from: posEnd - 1, to: posEnd }, + }) + + posEnd -= 1 + + const interval = randomNumberBetween(30, 100) + + setTimeout(deleteChar, interval) + } else { + resolve() + } + } + + setTimeout(deleteChar, 100) + }) +} + +export function markLinesAsReadonly( + view: EditorView, + ranges: { from: number; to: number }[] +): Promise { + return new Promise((resolve) => { + view.dispatch({ + effects: updateReadOnlyRangesEffect.of(ranges), + }) + resolve() + }) +} +export function revertLinesToEditable(view: EditorView): Promise { + return new Promise((resolve) => { + view.dispatch({ + effects: updateReadOnlyRangesEffect.of([]), + }) + resolve() + }) +} + +export function highlightCodeSelection( + view: EditorView, + { + regex, + ignoreCase, + lines, + }: { + regex: string + ignoreCase?: boolean + lines?: { from: number; to: number } + } +): Promise { + return new Promise((resolve) => { + if (regex.length === 0) { + resolve() + return + } + + const fromChar = lines ? view.state.doc.line(lines.from).from : 0 + const toChar = lines + ? view.state.doc.line(lines.to).to + : view.state.doc.length + + const cursor = new RegExpCursor( + view.state.doc, + regex, + { + ignoreCase: ignoreCase || false, + }, + fromChar, + toChar + ) + + while (!cursor.done) { + const { from, to } = cursor.value + if (from > -1 && to > -1) { + view.dispatch({ effects: addHighlight.of({ from, to }) }) + } + cursor.next() + } + resolve() + }) +} + +export function removeAllHighlights(view: EditorView): Promise { + return new Promise((resolve) => { + view.dispatch({ effects: removeAllHighlightEffect.of() }) + + resolve() + }) +} + +export function removeLine( + view: EditorView, + { line }: { line: number } +): Promise { + return new Promise((resolve) => { + const lineObj = view.state.doc.line(line) + let from = lineObj.from + let to = lineObj.to + if (line < view.state.doc.lines) { + to += 1 + } + + view.dispatch({ + changes: { from, to, insert: '' }, + }) + resolve() + }) +} + +export function placeCursor( + view: EditorView, + options: { line: number; char: number } +): Promise { + return new Promise((resolve) => { + view.focus() + view.dispatch({ + selection: { + anchor: view.state.doc.line(options.line).from + options.char, + head: view.state.doc.line(options.line).from + options.char, + }, + effects: showTutorTooltip.of(true), + }) + resolve() + }) +} + +export function highlightEditorContent(view: EditorView): Promise { + return new Promise((resolve) => { + const pos = view.state.doc.length + view.focus() + view.dispatch({ + selection: { anchor: pos, head: pos }, + effects: [ + showTutorTooltip.of(true), + changeMultiLineHighlightEffect.of({ + from: 1, + to: view.state.doc.lineAt(view.state.doc.length).number, + }), + ], + }) + + resolve() + }) +} + +export function deleteEditorContent(view: EditorView): Promise { + return new Promise((resolve) => { + const pos = view.state.doc.length + view.focus() + view.dispatch({ + selection: { anchor: pos, head: pos }, + effects: [ + showTutorTooltip.of(true), + changeMultiLineHighlightEffect.of({ + from: 1, + to: view.state.doc.lineAt(view.state.doc.length).number, + }), + ], + scrollIntoView: true, + }) + + setTimeout(() => { + view.dispatch({ + changes: { + from: 0, + to: view.state.doc.length, + insert: '', + }, + effects: changeMultiLineHighlightEffect.of({ + from: 0, + to: 0, + }), + }) + resolve() + }, 1000) + }) +} + +// TODO: Recalculate character positions after removing lines +export function highlightAndRemoveLines( + view: EditorView, + range: { from: number; to: number } +) { + // return new Promise((resolve) => { + for (let currentLine = range.from; currentLine <= range.to; currentLine++) { + const lineInDocument = view.state.doc.line(currentLine) + + if (lineInDocument.from === lineInDocument.to) continue + view.dispatch({ + effects: addHighlight.of({ + from: lineInDocument.from, + to: lineInDocument.to, + }), + }) + } + + const startingPosition = view.state.doc.line(range.from).from + setTimeout(() => { + for (let currentLine = range.from; currentLine <= range.to; currentLine++) { + const lineInDocument = view.state.doc.line(currentLine) + + console.log('LINEFROM TO', lineInDocument.from, lineInDocument.to) + view.dispatch({ + changes: { + from: startingPosition, + to: lineInDocument.to, + insert: '', + }, + }) + } + // resolve(); + }, 500) + // }); +} + +export function removeLineContent( + view: EditorView, + { line }: { line: number } +): Promise { + return new Promise((resolve) => { + const lineObj = view.state.doc.line(line) + let from = lineObj.from + let to = lineObj.to + + let insert = '' + if (line < view.state.doc.lines) { + to += 1 + insert = '\n' + } + + view.dispatch({ + changes: { from, to, insert: insert }, + }) + resolve() + }) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/describeError.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/describeError.ts new file mode 100644 index 0000000000..a7149a13af --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/describeError.ts @@ -0,0 +1,22 @@ +/* + * + * {"message":"error.syntax.MissingLeftBraceToStartIfBody","type":"MissingLeftBraceToStartIfBody","location":{"line":2,"relative":{"begin":11,"end":12},"absolute":{"begin":35,"end":36}}} + * + */ + +import type { StaticError } from '@/interpreter/error' + +export function describeError(error: StaticError) { + let output = `

${error.type}

` + output += `

${error.message}

` + if (error.context && error.context.didYouMean) { + if (error.context.didYouMean.variable) { + output += `

Did you mean ${error.context.didYouMean.variable}?

` + } + if (error.context.didYouMean.function) { + output += `

Did you mean to call the ${error.context.didYouMean.function} function?

` + } + } + output += `
` + return output +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/information-widget.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/information-widget.ts new file mode 100644 index 0000000000..c6c42766ef --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/information-widget.ts @@ -0,0 +1,184 @@ +import { WidgetType } from '@codemirror/view' +import { + computePosition, + autoUpdate, + arrow, + offset, + shift, +} from '@floating-ui/dom' +import hljs from 'highlight.js/lib/core' +import javascript from 'highlight.js/lib/languages/javascript' +import 'highlight.js/styles/default.min.css' + +export class InformationWidget extends WidgetType { + private tooltip: HTMLElement | null = null + private referenceElement: HTMLElement | null = null + private arrowElement: HTMLElement | null = null + private observer: MutationObserver | null = null + private autoUpdateCleanup: (() => void) | null = null + private scrollContainer: HTMLElement | null = null + + constructor( + private readonly tooltipHtml: string, + private readonly status: 'ERROR' | 'SUCCESS' + ) { + super() + } + + toDOM(): HTMLElement { + this.referenceElement = this.createRefElement() + this.createTooltip() + this.createArrow() + this.showTooltip() + this.setupScrollListener() + + this.initializeObserver() + + return this.referenceElement + } + + private createRefElement() { + const refElement = document.createElement('span') + refElement.classList.add('font-bold', 'text-black') + refElement.style.float = 'right' + refElement.innerText = ' ' + + return refElement + } + + private createTooltip() { + this.tooltip = document.createElement('div') + this.tooltip.classList.add('information-tooltip') + if (this.status === 'ERROR') { + this.tooltip.classList.add('error') + } else { + this.tooltip.classList.add('description') + } + this.tooltip.innerHTML = this.tooltipHtml + document.body.appendChild(this.tooltip) + + this.applyHighlighting(this.tooltip) + + this.tooltip.style.opacity = '0' + } + + private applyHighlighting(element: HTMLElement) { + hljs.registerLanguage('javascript', javascript) + const codeBlocks = element.querySelectorAll('pre code') + codeBlocks.forEach((block) => { + hljs.highlightBlock(block as HTMLElement) + }) + } + + private createArrow() { + if (!this.tooltip) return + this.arrowElement = document.createElement('div') + const arrowSize = '16px' + this.arrowElement.style.width = arrowSize + this.arrowElement.style.height = arrowSize + this.arrowElement.classList.add('tooltip-arrow') + this.arrowElement.style.position = 'absolute' + this.tooltip.appendChild(this.arrowElement) + } + + // @ts-ignore + private setupListeners(refElement: HTMLElement | null = null) { + if (!refElement) return + refElement.addEventListener('mouseenter', () => this.showTooltip()) + refElement.addEventListener('mouseleave', () => this.hideTooltip()) + } + + private showTooltip() { + if (!this.referenceElement || !this.tooltip || !this.arrowElement) return + + this.positionTooltip() + + if (this.referenceElement && this.tooltip) { + this.autoUpdateCleanup = autoUpdate( + this.referenceElement, + this.tooltip, + () => this.positionTooltip() + ) + } + } + + private positionTooltip() { + if (!this.referenceElement || !this.tooltip || !this.arrowElement) return + computePosition(this.referenceElement, this.tooltip, { + placement: 'right', + middleware: [ + offset(0), + shift({ padding: 0 }), + arrow({ element: this.arrowElement! }), + ], + }).then(({ x, y, middlewareData }) => { + const { arrow } = middlewareData + if (!this.tooltip) return + Object.assign(this.tooltip.style, { + left: `${x}px`, + top: `${y}px`, + opacity: '1', + position: 'absolute', + }) + + Object.assign(this.arrowElement!.style, { + left: `${-this.arrowElement!.offsetWidth / 2}px`, + top: arrow?.y != null ? `${arrow.y}px` : '', + transform: 'rotate(45deg)', + }) + }) + } + + private hideTooltip() { + if (this.tooltip) { + this.tooltip.style.opacity = '0' + } + } + + // observe elements and remove tooltip if info icon ceases to exist + private initializeObserver() { + if (!this.referenceElement || !this.tooltip) return + + this.observer = new MutationObserver((mutationsList) => { + for (const mutation of mutationsList) { + if (mutation.type === 'childList') { + mutation.removedNodes.forEach((node) => { + if (node === this.referenceElement) { + this.cleanup() + } + }) + } + } + }) + + this.observer.observe(document.body, { childList: true, subtree: true }) + } + + private setupScrollListener() { + const scrollContainer = document.querySelector('.editor') + if (!scrollContainer) return + scrollContainer.addEventListener('scroll', () => this.positionTooltip()) + this.scrollContainer = scrollContainer as HTMLElement + } + + private cleanup() { + if (this.scrollContainer) { + this.scrollContainer.removeEventListener('scroll', this.positionTooltip) + } + + if (this.autoUpdateCleanup) { + this.autoUpdateCleanup() + this.autoUpdateCleanup = null + } + + if (this.tooltip && this.tooltip.parentNode) { + this.tooltip.parentNode.removeChild(this.tooltip) + this.tooltip = null + } + + if (this.observer) { + this.observer.disconnect() + this.observer = null + } + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/line-information.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/line-information.ts new file mode 100644 index 0000000000..42f4e0c708 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/end-line-information/line-information.ts @@ -0,0 +1,107 @@ +import { + Decoration, + type DecorationSet, + EditorView, + ViewPlugin, + ViewUpdate, +} from '@codemirror/view' +import { StateEffect, StateField } from '@codemirror/state' +import { placeholderTheme } from '../placeholder-widget' +import { InformationWidget } from './information-widget' +import { highlightedLineField } from '../lineHighlighter' + +export const showInfoWidgetEffect = StateEffect.define() + +export const showInfoWidgetField = StateField.define({ + create() { + return false + }, + update(value, tr) { + for (const effect of tr.effects) { + if (effect.is(showInfoWidgetEffect)) { + return effect.value + } + } + return value + }, +}) + +export type InformationWidgetData = { + html: string + line: number + status: 'ERROR' | 'SUCCESS' +} +export const informationWidgetDataEffect = + StateEffect.define() + +export const informationWidgetDataField = + StateField.define({ + create() { + return { html: '', line: 0, status: 'SUCCESS' } + }, + update(value, tr) { + for (const effect of tr.effects) { + if (effect.is(informationWidgetDataEffect)) { + return effect.value + } + } + return value + }, + }) + +function lineInformationWidget(view: EditorView): DecorationSet { + let widgets: any[] = [] + + const shouldShowWidget = view.state.field(showInfoWidgetField) + const widgetData = view.state.field(informationWidgetDataField) + + // soft return + if (widgetData.line === 0) return Decoration.none + if (!shouldShowWidget) return Decoration.none + + const data = widgetData.html + + let deco = Decoration.widget({ + widget: new InformationWidget(data, widgetData.status), + side: 1, + }) + let lastPosOfLine = view.state.doc.line(widgetData.line).to + + widgets.push(deco.range(lastPosOfLine)) + + return Decoration.set(widgets) +} + +export const endLineDecoration = ViewPlugin.fromClass( + class { + placeholders: DecorationSet + constructor(view: EditorView) { + this.placeholders = lineInformationWidget(view) + } + update(update: ViewUpdate) { + if ( + update.docChanged || + update.viewportChanged || + update.startState.field(highlightedLineField) !== + update.state.field(highlightedLineField) || + update.startState.field(showInfoWidgetField) !== + update.state.field(showInfoWidgetField) || + update.startState.field(informationWidgetDataField) !== + update.state.field(informationWidgetDataField) + ) { + this.placeholders = lineInformationWidget(update.view) + } + } + }, + { + decorations: (instance) => instance.placeholders, + provide: (plugin) => + EditorView.atomicRanges.of((view) => { + return view.plugin(plugin)?.placeholders || Decoration.none + }), + } +) + +export function lineInformationExtension() { + return [placeholderTheme, endLineDecoration] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/index.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/index.ts new file mode 100644 index 0000000000..8668f127bd --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/index.ts @@ -0,0 +1,15 @@ +export { highlightLine } from './lineHighlighter' +export { + lineInformationExtension, + showInfoWidgetEffect, + showInfoWidgetField, + informationWidgetDataField, + informationWidgetDataEffect, +} from './end-line-information/line-information' +export { colorScheme } from './create-theme/colorScheme' +export { cursorTooltip } from './edit-editor/customCursor' +export { highlightedCodeBlock } from './edit-editor/highlightRange' +export { initReadOnlyRangesExtension } from './read-only-ranges/readOnlyRanges' +export { readOnlyRangeDecoration } from './read-only-ranges/readOnlyLineDeco' +export { underlineExtension } from './underlineRange' +export { multiHighlightLine } from './multiLineHighlighter' diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/lineHighlighter.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/lineHighlighter.ts new file mode 100644 index 0000000000..dd922cc315 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/lineHighlighter.ts @@ -0,0 +1,108 @@ +import { + EditorView, + ViewUpdate, + ViewPlugin, + Decoration, + type DecorationSet, +} from '@codemirror/view' +import { + type Extension, + StateField, + StateEffect, + RangeSetBuilder, +} from '@codemirror/state' + +export const INFO_HIGHLIGHT_COLOR = '#dadaff88' +export const ERROR_HIGHLIGHT_COLOR = '#fecaca88' + +export const changeLineEffect = StateEffect.define() + +export const highlightedLineField = StateField.define({ + create() { + return 1 + }, + update(value, tr) { + for (const effect of tr.effects) { + if (effect.is(changeLineEffect)) { + return effect.value + } + } + return value + }, +}) + +export const changeColorEffect = StateEffect.define() + +export const highlightColorField = StateField.define({ + create() { + return INFO_HIGHLIGHT_COLOR + }, + update(value, tr) { + for (const effect of tr.effects) { + if (effect.is(changeColorEffect)) { + return effect.value + } + } + return value + }, +}) + +// Base theme for highlighting +const baseTheme = EditorView.baseTheme({ + '&light .cm-highlightedLine': { backgroundColor: INFO_HIGHLIGHT_COLOR }, + '&dark .cm-highlightedLine': { backgroundColor: '#1a272788' }, +}) + +// Decoration for highlighting a line +function stripe(color: string) { + return Decoration.line({ + attributes: { + class: 'cm-highlightedLine', + style: `background-color: ${color}`, + }, + }) +} + +// Function to create line decorations based on the current state +function stripeDeco(view: EditorView) { + let builder = new RangeSetBuilder() + const lineNumber = view.state.field(highlightedLineField) + const color = view.state.field(highlightColorField) + + for (let { from, to } of view.visibleRanges) { + for (let pos = from; pos <= to; ) { + let line = view.state.doc.lineAt(pos) + if (line.number == lineNumber) + builder.add(line.from, line.from, stripe(color)) + pos = line.to + 1 + } + } + + return builder.finish() +} + +const showStripes = ViewPlugin.fromClass( + class { + decorations: DecorationSet + + constructor(view: EditorView) { + this.decorations = stripeDeco(view) + } + + update(update: ViewUpdate) { + this.decorations = stripeDeco(update.view) + } + }, + { + decorations: (v) => v.decorations, + } +) + +export function highlightLine(initialLineNumber: number): Extension { + return [ + baseTheme, + highlightedLineField.init(() => initialLineNumber), + highlightColorField.init(() => INFO_HIGHLIGHT_COLOR), + showStripes, + ] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/multiLineHighlighter.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/multiLineHighlighter.ts new file mode 100644 index 0000000000..fb79fe3f01 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/multiLineHighlighter.ts @@ -0,0 +1,103 @@ +import { + EditorView, + ViewUpdate, + ViewPlugin, + Decoration, + type DecorationSet, +} from '@codemirror/view' +import { + type Extension, + StateField, + StateEffect, + RangeSetBuilder, +} from '@codemirror/state' +import { highlightColorField, INFO_HIGHLIGHT_COLOR } from './lineHighlighter' + +export const changeMultiLineHighlightEffect = StateEffect.define<{ + from: number + to: number +}>() + +export const multiHighlightedLineField = StateField.define<{ + from: number + to: number +}>({ + create() { + return { from: 0, to: 0 } + }, + update(value, tr) { + for (const effect of tr.effects) { + if (effect.is(changeMultiLineHighlightEffect)) { + return effect.value + } + } + return value + }, +}) + +const baseTheme = EditorView.baseTheme({ + '&light .cm-highlightedLine': { backgroundColor: INFO_HIGHLIGHT_COLOR }, + '&dark .cm-highlightedLine': { backgroundColor: '#1a272788' }, +}) + +function stripe(color: string) { + return Decoration.line({ + attributes: { + class: 'cm-highlightedLine', + style: `background-color: ${color}`, + }, + }) +} + +function stripeDeco(view: EditorView) { + let builder = new RangeSetBuilder() + const lineNumberRange = view.state.field(multiHighlightedLineField) + const color = view.state.field(highlightColorField) + + let { from, to } = lineNumberRange + if (from === 0) return builder.finish() + to = to > view.state.doc.lines ? view.state.doc.lines : to + console.log('from', from, 'to', to, 'color', color) + if (from === to) { + builder.add(from, from, stripe(color)) + } else { + for (let i = lineNumberRange.from; i <= lineNumberRange.to; i++) { + let line = view.state.doc.line(i) + builder.add(line.from, line.from, stripe(color)) + } + } + + return builder.finish() +} + +const showStripes = ViewPlugin.fromClass( + class { + decorations: DecorationSet + + constructor(view: EditorView) { + this.decorations = stripeDeco(view) + } + + update(update: ViewUpdate) { + this.decorations = stripeDeco(update.view) + } + }, + { + decorations: (v) => v.decorations, + } +) + +export function multiHighlightLine({ + from, + to, +}: Record<'from' | 'to', number>): Extension { + return [ + baseTheme, + multiHighlightedLineField.init(() => ({ + from, + to, + })), + highlightColorField.init(() => INFO_HIGHLIGHT_COLOR), + showStripes, + ] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/placeholder-widget.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/placeholder-widget.ts new file mode 100644 index 0000000000..71bee7ae03 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/placeholder-widget.ts @@ -0,0 +1,101 @@ +import { EditorView, WidgetType } from '@codemirror/view' + +export class PlaceholderWidget extends WidgetType { + constructor(readonly label: string, readonly mode: 'info' | 'tutorial') { + super() + } + + toDOM(_view: EditorView): HTMLElement { + let wrap = document.createElement('span') + wrap.className = `cm-placeholder-widget` + wrap.classList.add(`${this.mode}Mode`) + let tutorialEmoji = '\u{1f4ac}' + wrap.innerText = `${this.mode === 'tutorial' ? tutorialEmoji : ''} ${ + this.label + }` + return wrap + } +} + +export class SVGWidget extends WidgetType { + constructor( + readonly arrowHeight: number, + readonly right: number, + readonly hoverRight: number, + readonly declarationCoords: { bottom: number; right: number } + ) { + super() + } + + toDOM(_view: EditorView): HTMLElement { + const svgContainer = document.createElement('div') + svgContainer.style.position = 'absolute' + svgContainer.style.top = `${this.declarationCoords.bottom - 52}px` + svgContainer.style.left = `${Math.min( + this.hoverRight, + this.declarationCoords.right + )}px` + svgContainer.innerHTML = generateArrowSVG( + this.arrowHeight, + this.right, + this.hoverRight + ) + return svgContainer + } +} + +export const placeholderTheme = EditorView.baseTheme({ + '.cm-placeholder-widget': { + borderRadius: '8px', + background: 'transparent', + fontFamily: 'Poppins', + padding: '2px 4px', + color: '#76709F', + fontSize: '14px', + alignItems: 'center', + }, + '.tutorialMode': { + background: '#E1EBFF', + color: '#2E57E8', + }, +}) + +export function placeholderExtension() { + return [placeholderTheme] +} + +function generateArrowSVG(length: number, right: number, hoverRight: number) { + console.log(hoverRight) + let offset = 30 + right = right + offset + length = length + 10 + // startingPoint + let s = { x: 5, y: 10 } + let arrowWidth = 10 + let arrowLength = 14 + + // topLeft + let tl = `${s.x} ${s.y}` + let tr = `${right} ${s.y}` + let br = `${right} ${length}` + let bl = `${hoverRight} ${length}` + console.log('hover', hoverRight, 'right', right) + return ` + + + + + ` +} + +;` + + + +` diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyLineDeco.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyLineDeco.ts new file mode 100644 index 0000000000..c6dd5db84c --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyLineDeco.ts @@ -0,0 +1,108 @@ +import { RangeSetBuilder, type Extension, RangeSet } from '@codemirror/state' +import { + Decoration, + ViewPlugin, + type DecorationSet, + ViewUpdate, + GutterMarker, + gutter, + gutterLineClass, +} from '@codemirror/view' +import { EditorView } from 'codemirror' +import { readOnlyRangesStateField } from './readOnlyRanges' + +const baseTheme = EditorView.baseTheme({ + '.cm-lockedLine, .cm-lockedGutter': { backgroundColor: '#5C558944' }, +}) + +class LockMarker extends GutterMarker { + toDOM() { + const lockContainer = document.createElement('div') + Object.assign(lockContainer.style, { + height: '16px', + width: '16px', + padding: '2px', + display: 'grid', + placeContent: 'center', + }) + lockContainer.innerHTML = `🔒` + return lockContainer + } +} +const gutterDeco = Decoration.line({ + attributes: { class: 'cm-lockedLine' }, + gutterMarker: new LockMarker(), +}) + +function lockedLineDeco(view: EditorView) { + let builder = new RangeSetBuilder() + const readOnlyRanges = view.state.field(readOnlyRangesStateField) + for (let range of readOnlyRanges) { + for (let i = range.from; i <= range.to; i++) { + let linePos = view.state.doc.line(i).from + + builder.add(linePos, linePos, gutterDeco) + } + } + + return builder.finish() +} + +const showStripes = ViewPlugin.fromClass( + class { + decorations: DecorationSet + + constructor(view: EditorView) { + this.decorations = lockedLineDeco(view) + } + + update(update: ViewUpdate) { + this.decorations = lockedLineDeco(update.view) + } + }, + { + decorations: (v) => v.decorations, + } +) + +const lockedLineGutterMarker = new (class extends GutterMarker { + elementClass = 'cm-lockedGutter' +})() + +const lockedLineGutterHighlighter = gutterLineClass.compute( + // dependency array + [readOnlyRangesStateField, 'doc'], + (state) => { + let marks = [] + for (let range of state.field(readOnlyRangesStateField)) { + for (let line = range.from; line <= range.to; line++) { + let linePos = state.doc.line(line).from + marks.push(lockedLineGutterMarker.range(linePos)) + } + } + return RangeSet.of(marks) + } +) + +const iconContainerGutter = gutter({ + class: 'cm-icon-container-gutter', + lineMarker: (view, line) => { + const readOnlyRanges = view.state.field(readOnlyRangesStateField) + const lineNumber = view.state.doc.lineAt(line.from).number + for (let range of readOnlyRanges) { + if (lineNumber >= range.from && lineNumber <= range.to) { + return new LockMarker() + } + } + return null + }, +}) + +export function readOnlyRangeDecoration(): Extension { + return [ + baseTheme, + showStripes, + iconContainerGutter, + lockedLineGutterHighlighter, + ] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyRanges.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyRanges.ts new file mode 100644 index 0000000000..b3dd78045f --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyRanges.ts @@ -0,0 +1,57 @@ +import { StateEffect, StateField } from '@codemirror/state' +import readOnlyRangesExtension from './readOnlyRangesExtension' + +type ReadOnlyRange = { from: number; to: number } +export const updateReadOnlyRangesEffect = StateEffect.define() +export const readOnlyRangesStateField = StateField.define({ + create() { + return [] + }, + update(ranges, tr) { + if (tr.startState.doc.lines < tr.state.doc.lines) { + const cursor = tr.state.selection.main.head + const newLine = tr.state.doc.lineAt(cursor).number + return ranges.map((r) => { + const rangeLine = r.from + if (rangeLine >= newLine) { + return { from: r.from + 1, to: r.to + 1 } + } else return r + }) + } + if (tr.startState.doc.lines > tr.state.doc.lines) { + const cursor = tr.state.selection.main.head + const lineAtCursor = tr.state.doc.lineAt(cursor) + const lineDeletedAbove = lineAtCursor.number - 1 + + return ranges.map((r) => { + if (r.from > lineDeletedAbove) { + return { from: r.from - 1, to: r.to - 1 } + } + + return r + }) + } + + for (let effect of tr.effects) { + if (effect.is(updateReadOnlyRangesEffect)) { + return effect.value + } + } + + return ranges + }, +}) + +export function initReadOnlyRangesExtension() { + return [ + readOnlyRangesStateField, + readOnlyRangesExtension((state) => { + return state.field(readOnlyRangesStateField).map((r) => { + return { + from: state.doc.line(r.from).from, + to: state.doc.line(r.to).to, + } + }) + }), + ] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyRangesExtension.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyRangesExtension.ts new file mode 100644 index 0000000000..6c0d32ded6 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/read-only-ranges/readOnlyRangesExtension.ts @@ -0,0 +1,138 @@ +import { EditorState, Transaction, type Extension } from '@codemirror/state' +import { EditorView } from '@codemirror/view' +import { getAvailableRanges } from 'range-analyzer' + +export const smartDelete = ( + getReadOnlyRanges: ( + targetState: EditorState + ) => Array<{ from: number | undefined; to: number | undefined }> +) => + EditorState.transactionFilter.of((tr: Transaction) => { + if ( + tr.isUserEvent('delete.selection') && + !tr.isUserEvent('delete.selection.smart') + ) { + const initialSelections = tr.startState.selection.ranges.map((range) => ({ + from: range.from, + to: range.to, + })) + + if (initialSelections.length > 0) { + const readOnlyRanges = getReadOnlyRanges(tr.startState) + const result = getAvailableRanges( + readOnlyRanges, + initialSelections[0], + { + from: 0, + to: tr.startState.doc.line(tr.startState.doc.lines).to, + } + ) as Array<{ from: number; to: number }> + + return result.map((range) => + tr.startState.update({ + changes: { + from: range.from, + to: range.to, + }, + annotations: Transaction.userEvent.of( + `${tr.annotation(Transaction.userEvent)}.smart` + ), + }) + ) + } + } + + return tr + }) + +export const preventModifyTargetRanges = ( + getReadOnlyRanges: ( + targetState: EditorState + ) => Array<{ from: number | undefined; to: number | undefined }> +) => + EditorState.changeFilter.of((tr: Transaction) => { + try { + const readOnlyRangesBeforeTransaction = getReadOnlyRanges(tr.startState) + const readOnlyRangesAfterTransaction = getReadOnlyRanges(tr.state) + + for (let i = 0; i < readOnlyRangesBeforeTransaction.length; i++) { + const targetFromBeforeTransaction = + readOnlyRangesBeforeTransaction[i].from ?? 0 + const targetToBeforeTransaction = + readOnlyRangesBeforeTransaction[i].to ?? + tr.startState.doc.line(tr.startState.doc.lines).to + + const targetFromAfterTransaction = + readOnlyRangesAfterTransaction[i].from ?? 0 + const targetToAfterTransaction = + readOnlyRangesAfterTransaction[i].to ?? + tr.state.doc.line(tr.state.doc.lines).to + + if ( + tr.startState.sliceDoc( + targetFromBeforeTransaction, + targetToBeforeTransaction + ) !== + tr.state.sliceDoc( + targetFromAfterTransaction, + targetToAfterTransaction + ) + ) { + return false + } + } + } catch (e) { + return false + } + return true + }) + +export const smartPaste = ( + getReadOnlyRanges: ( + targetState: EditorState + ) => Array<{ from: number | undefined; to: number | undefined }> +) => + EditorView.domEventHandlers({ + paste(event, view) { + const clipboardData = event.clipboardData || (window as any).clipboardData + const pastedData = clipboardData.getData('Text') + const initialSelections = view.state.selection.ranges.map((range) => ({ + from: range.from, + to: range.to, + })) + + if (initialSelections.length > 0) { + const readOnlyRanges = getReadOnlyRanges(view.state) + const result = getAvailableRanges( + readOnlyRanges, + initialSelections[0], + { + from: 0, + to: view.state.doc.line(view.state.doc.lines).to, + } + ) as Array<{ from: number; to: number }> + if (result.length > 0) { + view.dispatch({ + changes: { + from: result[0].from, + to: result[0].to, + insert: pastedData, + }, + annotations: Transaction.userEvent.of(`input.paste.smart`), + }) + } + } + return true + }, + }) + +const readOnlyRangesExtension = ( + getReadOnlyRanges: ( + targetState: EditorState + ) => Array<{ from: number | undefined; to: number | undefined }> +): Extension => [ + smartPaste(getReadOnlyRanges), + smartDelete(getReadOnlyRanges), + preventModifyTargetRanges(getReadOnlyRanges), +] +export default readOnlyRangesExtension diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/underlineRange.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/underlineRange.ts new file mode 100644 index 0000000000..a2f2502236 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/underlineRange.ts @@ -0,0 +1,53 @@ +import { EditorView, Decoration, type DecorationSet } from '@codemirror/view' +import { StateField, StateEffect } from '@codemirror/state' +import { cleanUpEditorEffect } from './clean-up-editor' + +export const addUnderlineEffect = StateEffect.define<{ + from: number + to: number +}>({ + map: ({ from, to }, change) => ({ + from: change.mapPos(from), + to: change.mapPos(to), + }), +}) + +export const underlineField = StateField.define({ + create() { + return Decoration.none + }, + update(underlines, tr) { + if (tr.docChanged) { + return Decoration.none + } + let updatedUnderlines = underlines.map(tr.changes) + for (let e of tr.effects) { + if (e.is(cleanUpEditorEffect)) { + updatedUnderlines = Decoration.none + } + if (e.is(addUnderlineEffect)) { + const { from, to } = e.value + if (from >= 0 && to <= tr.newDoc.length) { + updatedUnderlines = Decoration.none.update({ + add: [underlineMark.range(from, to)], + }) + } + } + } + return updatedUnderlines + }, + provide: (f) => EditorView.decorations.from(f), +}) + +const underlineMark = Decoration.mark({ class: 'cm-underline' }) + +// styling for .cm-underline is in codemirror.css +export function underlineExtension({ + underlineStyle, +}: { underlineStyle?: string } = {}) { + const defaultStyle = underlineStyle || 'underline 2px red' + const underlineTheme = EditorView.baseTheme({ + '.cm-underline': { textDecoration: defaultStyle }, + }) + return [underlineField, underlineTheme] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/getCodeMirrorFieldValue.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/getCodeMirrorFieldValue.ts new file mode 100644 index 0000000000..a3faa0d669 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/getCodeMirrorFieldValue.ts @@ -0,0 +1,10 @@ +import type { StateField } from '@codemirror/state' +import type { EditorView } from 'codemirror' + +export function getCodeMirrorFieldValue( + view: EditorView | null, + field: StateField +): any { + if (!view) return + return view.state.field(field) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/index.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/index.ts new file mode 100644 index 0000000000..41b6ae073f --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/index.ts @@ -0,0 +1,5 @@ +export { useReadonlyCompartment } from './useReadonlyCompartment' +export { useHighlightLine } from './useHighlightLine' +export { useHighlightLineColor } from './useHighlightLineColor' +export { useUnderlineRange } from './useUnderlineRange' +export { useReadonlyRanges } from './useReadonlyRanges' diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useHighlightLine.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useHighlightLine.ts new file mode 100644 index 0000000000..971775536a --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useHighlightLine.ts @@ -0,0 +1,21 @@ +import { useEffect } from 'react' +import { changeLineEffect } from '../extensions/lineHighlighter' +import type { EditorView } from 'codemirror' + +export function useHighlightLine( + editorView: EditorView | null, + highlightedLine: number +) { + useEffect(() => { + if (!editorView) { + return + } + + // dispatch a transaction which syncs cm's inner state with React's state + if (highlightedLine !== undefined) { + editorView.dispatch({ + effects: changeLineEffect.of(highlightedLine), + }) + } + }, [highlightedLine]) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useHighlightLineColor.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useHighlightLineColor.ts new file mode 100644 index 0000000000..6464c35101 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useHighlightLineColor.ts @@ -0,0 +1,21 @@ +import { useEffect } from 'react' +import { changeColorEffect } from '../extensions/lineHighlighter' +import type { EditorView } from 'codemirror' + +export function useHighlightLineColor( + editorView: EditorView | null, + highlightedLineColor: string +) { + useEffect(() => { + if (!editorView) { + return + } + + // dispatch a transaction which syncs cm's inner state with React's state + if (highlightedLineColor !== undefined) { + editorView.dispatch({ + effects: changeColorEffect.of(highlightedLineColor), + }) + } + }, [highlightedLineColor]) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useReadonlyCompartment.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useReadonlyCompartment.ts new file mode 100644 index 0000000000..f9f96f2ceb --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useReadonlyCompartment.ts @@ -0,0 +1,20 @@ +import { EditorView } from '@codemirror/view' +import { useEffect } from 'react' +import { type ViewRef, readonlyCompartment } from '../CodeMirror' + +export function useReadonlyCompartment( + editorView: EditorView | null, + readonly: boolean +) { + useEffect(() => { + if (!editorView) { + return + } + + editorView.dispatch({ + effects: readonlyCompartment.reconfigure([ + EditorView.editable.of(!readonly), + ]), + }) + }, [readonly]) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useReadonlyRanges.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useReadonlyRanges.ts new file mode 100644 index 0000000000..4e589e6911 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useReadonlyRanges.ts @@ -0,0 +1,18 @@ +import { useEffect } from 'react' +import type { EditorView } from 'codemirror' +import { updateReadOnlyRangesEffect } from '../extensions/read-only-ranges/readOnlyRanges' + +export function useReadonlyRanges( + editorView: EditorView | null, + readonlyRanges: Array<{ from: number; to: number }> +) { + useEffect(() => { + if (!editorView) { + return + } + + editorView.dispatch({ + effects: updateReadOnlyRangesEffect.of(readonlyRanges), + }) + }, [readonlyRanges]) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useUnderlineRange.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useUnderlineRange.ts new file mode 100644 index 0000000000..6d38392a60 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/hooks/useUnderlineRange.ts @@ -0,0 +1,20 @@ +import { useEffect } from 'react' +import { addUnderlineEffect } from '../extensions/underlineRange' +import type { EditorView } from 'codemirror' + +export function useUnderlineRange( + editorView: EditorView | null, + range: { from: number; to: number } | undefined +) { + useEffect(() => { + if (!editorView) { + return + } + + if (range !== undefined) { + editorView.dispatch({ + effects: addUnderlineEffect.of(range), + }) + } + }, [range]) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx new file mode 100644 index 0000000000..c18bdb53e3 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx @@ -0,0 +1,56 @@ +import { useRef, useState } from 'react' +import { useOnRunCode } from '../hooks/useOnRunCode/useOnRunCode' +import { cleanUpEditor } from './extensions/clean-up-editor' +import type { EditorView } from 'codemirror' +import type { Handler } from './CodeMirror' +import { updateReadOnlyRangesEffect } from './extensions/read-only-ranges/readOnlyRanges' + +export function useEditorHandler({ + links, + code, + config, +}: Pick & { config: Config }) { + const editorHandler = useRef(null) + const editorViewRef = useRef(null) + + const [latestValueSnapshot, setLatestValueSnapshot] = useState< + string | undefined + >(undefined) + + const handleEditorDidMount = (handler: Handler) => { + editorHandler.current = handler + setupEditor(editorViewRef.current, code) + } + + const onRunCode = useOnRunCode({ + links, + config, + }) + + const handleRunCode = () => { + if (editorViewRef.current) { + cleanUpEditor(editorViewRef.current) + } + if (editorHandler.current) { + const value = editorHandler.current.getValue() + + setLatestValueSnapshot(value) + onRunCode(value, editorViewRef.current) + } + } + + return { + handleEditorDidMount, + handleRunCode, + editorHandler, + latestValueSnapshot, + editorViewRef, + } +} + +function setupEditor(editorView: EditorView | null, code: Code) { + if (!editorView || !code || !code.readonlyRanges) return + editorView.dispatch({ + effects: updateReadOnlyRangesEffect.of(code.readonlyRanges), + }) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx new file mode 100644 index 0000000000..f896e0774e --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx @@ -0,0 +1,45 @@ +import React from 'react' +import { assembleClassNames } from '@/utils/assemble-classnames' +import useEditorStore from '../store/editorStore' + +export function CheckScenariosButton({ + handleRunCode, +}: { + handleRunCode: () => void +}) { + const { toggleShouldAutoRunCode, shouldAutoRunCode, setShouldAutoRunCode } = + useEditorStore() + return ( +
{ + handleRunCode() + setShouldAutoRunCode(false) + }} + > + Check Scenarios + +
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/ControlButtons.tsx b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/ControlButtons.tsx new file mode 100644 index 0000000000..240fc794f1 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/ControlButtons.tsx @@ -0,0 +1,29 @@ +import React from 'react' +import { TestResultsButtons } from '../TestResultsView/TestResultsButtons' +import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' +import { CheckScenariosButton } from './CheckScenariosButton' +import useTestStore from '../store/testStore' +import { PreviousTestResultsButtons } from '../PreviousTestResultsView/PreviousTestResultsButtons' + +function _ControlButtons({ handleRunCode }: { handleRunCode: () => void }) { + return ( +
+ + + + +
+ ) +} + +export const ControlButtons = wrapWithErrorBoundary(_ControlButtons) + +function IdleTestButton() { + const { testSuiteResult, previousTestSuiteResult } = useTestStore() + if (testSuiteResult || previousTestSuiteResult) return null + return ( +
+ +
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Instructions/Instructions.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Instructions/Instructions.tsx new file mode 100644 index 0000000000..d6af7b7e41 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Instructions/Instructions.tsx @@ -0,0 +1,70 @@ +import React from 'react' +import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' +import useTaskStore from '../store/taskStore/taskStore' +import { useEffect, useMemo, useRef } from 'react' +// @ts-ignore +import Typewriter from 'typewriter-effect/dist/core' +import { type Options } from 'typewriter-effect' + +export function _Instructions({ + exerciseInstructions, +}: { + exerciseInstructions: string +}): JSX.Element { + const { activeTaskIndex, tasks, areAllTasksCompleted } = useTaskStore() + + const typewriterRef = useRef(null) + const isFirstRender = useRef(true) + const currentTask = useMemo( + () => (tasks !== null ? tasks[activeTaskIndex] : null), + [activeTaskIndex, tasks] + ) + + useEffect(() => { + if (!typewriterRef.current || !currentTask) return + + // skip Typewriter on the first render + if (isFirstRender.current) { + typewriterRef.current.innerHTML = currentTask.instructionsHtml + isFirstRender.current = false + } else { + // only type it out if a new task is the currentTask + new Typewriter(typewriterRef.current, { + autoStart: false, + delay: 10, + loop: false, + } as Options) + .typeString(currentTask.instructionsHtml) + .start() + } + }, [currentTask]) + + return ( +
+

Instructions

+ +
Instructions are missing

', + }} + /> + + {areAllTasksCompleted ? ( + <> +

Congratulations!

+

You have successfully completed all the tasks!

+ + ) : ( + <> +

+ Task {activeTaskIndex + 1}: {currentTask?.name} +

+ {/* "inline" is required to keep the cursor on the same line */} +
+ + )} +
+ ) +} + +export const Instructions = wrapWithErrorBoundary(_Instructions) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsButtons.tsx b/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsButtons.tsx new file mode 100644 index 0000000000..9d11643e24 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsButtons.tsx @@ -0,0 +1,46 @@ +import React from 'react' +import { assembleClassNames } from '@/utils/assemble-classnames' +import useTestStore from '../store/testStore' + +const TRANSITION_DELAY = 0.2 + +export function PreviousTestResultsButtons() { + const { + previousTestSuiteResult, + testSuiteResult, + inspectedPreviousTestResult, + setInspectedPreviousTestResult, + } = useTestStore() + + if (!previousTestSuiteResult || testSuiteResult) return null + return ( +
+ {previousTestSuiteResult.tests.map((test, idx) => { + return ( + + ) + })} +
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsView.tsx new file mode 100644 index 0000000000..7d73ab0a22 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsView.tsx @@ -0,0 +1,92 @@ +import React from 'react' +import { useMemo } from 'react' +import { assembleClassNames } from '@/utils/assemble-classnames' +import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' +import { IOTestResultView } from '../TestResultsView/IOTestResultView' +import { StateTestResultView } from '../TestResultsView/StateTestResultView' +import { useMountViewOrImage } from '../TaskPreview/useMountViewOrImage' +import useTestStore from '../store/testStore' +import { getDiffOfExpectedAndActual } from '../TestResultsView/useInspectedTestResultView' +import { CodeRun } from '../TestResultsView/CodeRun' +import { PassMessage } from '../TestResultsView/PassMessage' + +function _PreviousTestResultView({ exercise }: { exercise: Exercise }) { + const { inspectedPreviousTestResult: result, testSuiteResult } = + useTestStore() + const currentTaskTest: TaskTest = useMemo(() => { + if (!result) { + return exercise.tasks[0].tests[0] + } + for (const task of exercise.tasks) { + const foundTest = task.tests.find((test) => test.slug === result.slug) + if (foundTest) return foundTest + } + return exercise.tasks[0].tests[0] + }, [exercise.tasks, result?.slug]) + + const viewContainerRef = useMountViewOrImage({ + config: exercise.config, + taskTest: currentTaskTest, + result: result!, + }) + + // if recently ran testSuiteResult exists, don't show this + if (!result || testSuiteResult) return null + + return ( +
+ + +
+
+ ) +} + +export const PreviousTestResultView = wrapWithErrorBoundary( + _PreviousTestResultView +) + +function PreviousTestResultViewLHS({ result }: { result: PreviousTestResult }) { + return ( +
+
+

+ Scenario: {result.name} - {result.status} +

+ {result.status === 'fail' ? ( +
+ {result.testsType === 'state' ? ( + + ) : ( + <> + + + + )} +
+ ) : ( + + )} +
+
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/InformationWidgetTiggleButton.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/InformationWidgetTiggleButton.tsx new file mode 100644 index 0000000000..2f6ec97b8b --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/InformationWidgetTiggleButton.tsx @@ -0,0 +1,45 @@ +import React from 'react' +import { useCallback } from 'react' +import useEditorStore from '../store/editorStore' +import useTestStore from '../store/testStore' + +export function InformationWidgetToggleButton({ + disabled, +}: { + disabled: boolean +}) { + const { + toggleShouldShowInformationWidget, + shouldShowInformationWidget, + setHighlightedLine, + } = useEditorStore() + const { inspectedTestResult } = useTestStore() + const handleToggleShouldShowInformationWidget = useCallback(() => { + toggleShouldShowInformationWidget() + + if (!inspectedTestResult) return + + // if there is only one frame.. + if (inspectedTestResult.frames.length === 1) { + // ...and we are about to show information widget + if (!shouldShowInformationWidget) { + // highlight relevant line + setHighlightedLine(inspectedTestResult.frames[0].line) + } else { + // if toggling's next step is off, remove highlight + setHighlightedLine(0) + } + } + }, [shouldShowInformationWidget, inspectedTestResult]) + return ( + + ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/Scrubber.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/Scrubber.tsx new file mode 100644 index 0000000000..a69ee6db5c --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/Scrubber.tsx @@ -0,0 +1,140 @@ +import React from 'react' +import { useEffect, useState } from 'react' +import { calculateMaxInputValue, useScrubber } from './useScrubber' +import useEditorStore from '@/components/bootcamp/SolveExercisePage/store/editorStore' +import { TooltipInformation } from './ScrubberTooltipInformation' +import { InformationWidgetToggleButton } from './InformationWidgetTiggleButton' + +function Scrubber({ testResult }: { testResult: NewTestResult }) { + const [isPlaying, setIsPlaying] = useState(false) + + const { hasCodeBeenEdited, setShouldShowInformationWidget } = useEditorStore() + + const { + value, + handleChange, + handleOnMouseUp, + handleOnKeyUp, + handleOnKeyDown, + handleMouseDown, + updateInputBackground, + rangeRef, + handleGoToNextFrame, + handleGoToPreviousFrame, + handleScrubToCurrentTime, + } = useScrubber({ + setIsPlaying, + testResult, + }) + + useEffect(() => { + if (isPlaying || hasCodeBeenEdited) { + setShouldShowInformationWidget(false) + } + }, [isPlaying, hasCodeBeenEdited]) + + // when user switches between test results, scrub to animation timeline's persisted currentTime + useEffect(() => { + if (!testResult.animationTimeline) { + return + } + handleScrubToCurrentTime(testResult.animationTimeline) + }, [testResult.animationTimeline?.timeline.currentTime]) + + return ( +
{ + // we wanna focus the range input, so keyboard shortcuts work + rangeRef.current?.focus() + }} + tabIndex={-1} + className="relative group" + > + testResult.animationTimeline?.play()} + /> + handleOnKeyUp(event, testResult)} + onKeyDown={(event) => handleOnKeyDown(event, testResult)} + min={0} + ref={rangeRef} + max={calculateMaxInputValue(testResult)} + onInput={updateInputBackground} + value={value} + onMouseDown={(event) => handleMouseDown(event, testResult)} + onChange={(event) => { + handleChange(event, testResult) + updateInputBackground() + }} + onMouseUp={() => handleOnMouseUp(testResult)} + /> + handleGoToNextFrame(testResult)} + onPrev={() => handleGoToPreviousFrame(testResult)} + disabled={shouldScrubberBeDisabled(hasCodeBeenEdited, testResult)} + /> + + +
+ ) +} + +export default Scrubber + +function PlayButton({ + disabled, + onClick, +}: { + disabled: boolean + onClick: () => void +}) { + return ( + + ) +} + +function FrameStepperButtons({ + onNext, + onPrev, + disabled, +}: { + onNext: () => void + onPrev: () => void + disabled: boolean +}) { + return ( +
+ + +
+ ) +} + +function shouldScrubberBeDisabled( + hasCodeBeenEdited: boolean, + testResult: NewTestResult +) { + // if the code has been edited, the scrubber should be disabled + // if there is no animation timeline and there is only one frame, the scrubber should be disabled + return ( + hasCodeBeenEdited || + (!testResult.animationTimeline && testResult.frames.length === 1) + ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/ScrubberTooltipInformation.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/ScrubberTooltipInformation.tsx new file mode 100644 index 0000000000..fe4fbf1585 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/ScrubberTooltipInformation.tsx @@ -0,0 +1,29 @@ +import React from 'react' +export function TooltipInformation({ + hasCodeBeenEdited, + notEnoughFrames, +}: Record) { + // editing code removes frames anyway, so this has to be higher precedence + if (hasCodeBeenEdited) { + return ( + + ) + } + + if (notEnoughFrames) { + return ( + + ) + } +} + +function StaticTooltip({ text }: { text: string }) { + return ( +
+ {text} +
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/useScrubber.ts b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/useScrubber.ts new file mode 100644 index 0000000000..e4aaa3c74c --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/useScrubber.ts @@ -0,0 +1,386 @@ +import type { AnimeInstance } from 'animejs' +import { useState, useEffect, useCallback, useRef } from 'react' +import anime from 'animejs' +import useEditorStore from '../store/editorStore' +import type { AnimationTimeline } from '../AnimationTimeline/AnimationTimeline' +import type { Frame } from '@/interpreter/frames' +import { showError } from '../utils/showError' +import type { StaticError } from '@/interpreter/error' +import { INFO_HIGHLIGHT_COLOR } from '../CodeMirror/extensions/lineHighlighter' + +export function useScrubber({ + setIsPlaying, + testResult, +}: { + setIsPlaying: React.Dispatch> + testResult: NewTestResult +}) { + const [value, setValue] = useState(0) + const [currentFrameIdx] = useState(0) + const { + setHighlightedLine, + setHighlightedLineColor, + setInformationWidgetData, + informationWidgetData, + setShouldShowInformationWidget, + setUnderlineRange, + } = useEditorStore() + + // this effect is responsible for updating the scrubber value based on the current time of animationTimeline + useEffect(() => { + if (testResult.animationTimeline) { + testResult.animationTimeline.onUpdate((anime) => { + setValue(anime.currentTime) + testResult.animationTimeline?.currentFrame + }) + } + }, [testResult.animationTimeline]) + + // this effect is responsible for updating the highlighted line and information widget based on currentFrame + useEffect(() => { + let currentFrame: Frame | undefined + if (testResult.animationTimeline) { + currentFrame = testResult.animationTimeline.currentFrame + } else { + currentFrame = testResult.frames[value] + } + if (currentFrame) { + setHighlightedLine(currentFrame.line) + switch (currentFrame.status) { + case 'SUCCESS': { + setHighlightedLineColor(INFO_HIGHLIGHT_COLOR) + setInformationWidgetData({ + html: currentFrame.description, + line: currentFrame.line, + status: 'SUCCESS', + }) + break + } + case 'ERROR': { + const error = currentFrame.error + showError({ + error: error as StaticError, + setHighlightedLine, + setHighlightedLineColor, + setInformationWidgetData, + setShouldShowInformationWidget, + setUnderlineRange, + }) + } + } + } + }, [testResult.animationTimeline, value]) + + const handleScrubToCurrentTime = useCallback( + (animationTimeline: AnimationTimeline) => { + if (!animationTimeline) return + const value = animationTimeline.timeline.currentTime + setValue(value) + animationTimeline.seek(value) + }, + [setValue] + ) + + const handleChange = useCallback( + ( + event: + | React.ChangeEvent + | React.MouseEvent, + testResult: NewTestResult + ) => { + const newValue = Number((event.target as HTMLInputElement).value) + setValue(newValue) + + if (testResult.animationTimeline) { + testResult.animationTimeline.pause() + testResult.animationTimeline.seek(newValue) + } else { + const validIndex = Math.max(0, newValue) + const highlightedLine = + newValue === -1 ? 0 : testResult.frames[validIndex].line + setHighlightedLine(highlightedLine) + } + }, + [setValue, setInformationWidgetData] + ) + + const handleMouseDown = useCallback( + ( + event: + | React.ChangeEvent + | React.MouseEvent, + testResult: NewTestResult + ) => { + if (informationWidgetData.line === 0) { + handleChange(event, testResult) + } + }, + [handleChange, informationWidgetData.line] + ) + + const scrubberValueAnimation = useRef() + + const handleOnMouseUp = useCallback( + (testResult: NewTestResult) => { + const { animationTimeline } = testResult + + if (!animationTimeline) return + // find closest frame to progress + const { progress } = animationTimeline + const { duration } = animationTimeline.timeline + let closestTime = duration + let closestDifference = Math.abs(duration - progress) + + for (const frame of testResult.frames) { + const frameTime = frame.time + const difference = Math.abs(frameTime - progress) + + if (difference < closestDifference) { + closestTime = frameTime + closestDifference = difference + } + } + if (scrubberValueAnimation.current) { + anime.remove(scrubberValueAnimation.current) + } + + scrubberValueAnimation.current = anime({ + // for smooth animation, use progress (which is current `value`) as a starting point + targets: { value }, + // if progress is closer to duration than time, then snap to duration + value: closestTime, + duration: 50, + easing: 'easeOutQuad', + update: function (anim) { + const newTime = Number(anim.animations[0].currentValue) + setValue(newTime) + animationTimeline.seek(newTime) + }, + }) + }, + [setValue, value] + ) + + const handleGoToPreviousFrame = useCallback( + (testResult: NewTestResult) => { + const { animationTimeline } = testResult + + if (!animationTimeline) { + // index shouldn't be under 0 or above the last frame + const validIndex = Math.min( + Math.max(0, value - 1), + testResult.frames.length - 1 + ) + setValue(validIndex) + return + } + + if (scrubberValueAnimation.current) { + anime.remove(scrubberValueAnimation.current) + } + + const currentTime = animationTimeline.progress + const lastFrameTime = testResult.frames[testResult.frames.length - 1].time + + /* + + if we are at the very end of the animation timeline, + targetTime should be the start time of the last frame’s animation. + + e.g.: if the last frame’s animation starts at 5 seconds and the timeline ends at 10 seconds, + being at 10 seconds should move us to 5 seconds. + + otherwise, move to the start time of the previous frame. + + */ + + const prevFrame = animationTimeline.previousFrame + const targetTime = + currentTime === animationTimeline.timeline.duration + ? lastFrameTime + : // if there is no previous frame, go to the start of the timeline + prevFrame + ? prevFrame.time + : 0 + + scrubberValueAnimation.current = anime({ + targets: { value }, + value: targetTime, + duration: 50, + easing: 'easeOutQuad', + update: function (anim) { + const animatedTime = Number(anim.animations[0].currentValue) + setValue(animatedTime) + animationTimeline.seek(animatedTime) + }, + }) + }, + [value] + ) + + const handleGoToNextFrame = useCallback( + (testResult: NewTestResult) => { + const { animationTimeline } = testResult + + if (!animationTimeline) { + // index shouldn't be under 0 or above the last frame + const validIndex = Math.min( + Math.max(0, value + 1), + testResult.frames.length - 1 + ) + setValue(validIndex) + return + } + + if (scrubberValueAnimation.current) { + anime.remove(scrubberValueAnimation.current) + } + + // if there is no next frame, go to the end of the animation + const targetTime = animationTimeline.nextFrame + ? animationTimeline.nextFrame.time + : animationTimeline.timeline.duration + + scrubberValueAnimation.current = anime({ + targets: { value }, + value: targetTime, + duration: 50, + easing: 'easeOutQuad', + update: function (anim) { + const animatedTime = Number(anim.animations[0].currentValue) + setValue(animatedTime) + animationTimeline.seek(animatedTime) + }, + }) + }, + [value] + ) + + const handleGoToFirstFrame = useCallback((testResult: NewTestResult) => { + const { animationTimeline } = testResult + if (animationTimeline) { + animationTimeline.seekFirstFrame() + } + }, []) + + const handleGoToEndOfTimeline = useCallback((testResult: NewTestResult) => { + const { animationTimeline } = testResult + if (animationTimeline) { + animationTimeline.seekEndOfTimeline() + } + }, []) + + /* + when holding a key down, store it in a set and escape invoking frame-stepping handlers. + let user browse scrubber freely + */ + const [heldKeys, setHeldKeys] = useState(new Set()) + const handleOnKeyUp = useCallback( + ( + event: React.KeyboardEvent, + testResult: NewTestResult + ) => { + const { animationTimeline } = testResult + if (!animationTimeline) return + setHeldKeys((prev) => { + const newSet = new Set(prev) + newSet.delete(event.key) + return newSet + }) + }, + [setHeldKeys] + ) + + const handleOnKeyDown = ( + event: React.KeyboardEvent, + testResult: NewTestResult + ) => { + const { animationTimeline } = testResult + if (!animationTimeline) return + + setHeldKeys((prev) => new Set(prev).add(event.key)) + // if user is holding a key, don't invoke frame-stepping handlers + if (heldKeys.has(event.key)) return + + /* + preventing default is necessary to avoid jarring UI jumps: + without it, moving from 1 to 2 causes an immediate jump to 2, + then snaps back to the animation's current progress before completing the animation, easing from 1 to 2. + */ + event.preventDefault() + + switch (event.key) { + case 'ArrowLeft': + handleGoToPreviousFrame(testResult) + break + + case 'ArrowRight': + handleGoToNextFrame(testResult) + break + + case 'ArrowDown': + handleGoToFirstFrame(testResult) + break + + case 'ArrowUp': + handleGoToEndOfTimeline(testResult) + break + + case ' ': + if (animationTimeline.paused) { + animationTimeline.play() + setIsPlaying(true) + } else { + animationTimeline.pause() + setIsPlaying(false) + } + break + default: + return + } + } + + const rangeRef = useRef(null) + const updateInputBackground = () => { + const input = rangeRef.current + if (!input) return + + const value = parseFloat(input.value) + const min = parseFloat(input.min) + const max = parseFloat(input.max) + + const percentage = ((value - min) / (max - min)) * 100 + // 7128F5 - jiki purple + const backgroundStyle = `linear-gradient(to right, #7128F5 ${percentage}%, #fff ${percentage}%)` + input.style.background = backgroundStyle + } + + useEffect(() => { + updateInputBackground() + }, [value, testResult.animationTimeline]) + + return { + value, + handleChange, + handleMouseDown, + handleOnMouseUp, + handleOnKeyUp, + handleOnKeyDown, + handleGoToNextFrame, + handleGoToPreviousFrame, + handleGoToEndOfTimeline, + handleGoToFirstFrame, + currentFrameIdx, + rangeRef, + updateInputBackground, + handleScrubToCurrentTime, + } +} + +export function calculateMaxInputValue(testResult: NewTestResult) { + if (testResult.animationTimeline) { + return testResult.animationTimeline.timeline.duration + } + + return testResult.frames.length - 1 +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx new file mode 100644 index 0000000000..5a0e63b82f --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx @@ -0,0 +1,86 @@ +import React from 'react' + +import { useEditorHandler } from './CodeMirror/useEditorHandler' +import { InspectedTestResultView } from './TestResultsView/InspectedTestResultView' +import { Tasks } from './Tasks/Tasks' +import { Instructions } from './Instructions/Instructions' +import { useSetupStores } from './hooks/useSetupStores' +import { ControlButtons } from './ControlButtons/ControlButtons' +import { CodeMirror } from './CodeMirror/CodeMirror' +import { ErrorBoundary } from '@/components/ErrorBoundary' +import { Resizer, useResizablePanels } from './hooks/useResize' +import { TaskPreview } from './TaskPreview/TaskPreview' +import SolveExercisePageContextWrapper from './SolveExercisePageContextWrapper' +import { PreviousTestResultView } from './PreviousTestResultsView/PreviousTestResultsView' + +export default function SolveExercisePage({ + exercise, + code, + links, + solution, +}: SolveExercisePageProps): JSX.Element { + // this returns handleRunCode which is onRunCode but with studentCode passed in as an argument + const { handleEditorDidMount, handleRunCode, editorViewRef } = + useEditorHandler({ + links, + config: exercise.config, + code, + }) + + useSetupStores({ exercise, code }) + const { + primarySize: LHSWidth, + secondarySize: RHSWidth, + handleMouseDown, + } = useResizablePanels({ + initialSize: 800, + direction: 'horizontal', + localStorageId: 'solve-exercise-page-lhs', + }) + + const { + primarySize: TopHeight, + secondarySize: BottomHeight, + handleMouseDown: handleHeightChangeMouseDown, + } = useResizablePanels({ + initialSize: 800, + secondaryMinSize: 200, + direction: 'vertical', + localStorageId: 'solve-exercise-page-editor-height', + }) + + return ( + +
+ {/* LHS */} +
+ + + + + +
+ + + + +
+
+ + {/* RHS */} +
+ + +
+
+
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper.tsx b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper.tsx new file mode 100644 index 0000000000..d571bb2754 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper.tsx @@ -0,0 +1,29 @@ +import React from 'react' + +import { createContext } from 'react' + +type SolveExercisePageContextValues = Pick< + SolveExercisePageProps, + 'links' | 'solution' | 'exercise' +> + +export const SolveExercisePageContext = + createContext({ + links: {} as SolveExercisePageContextValues['links'], + solution: {} as SolveExercisePageContextValues['solution'], + exercise: {} as SolveExercisePageContextValues['exercise'], + }) + +export default function SolveExercisePageContextWrapper({ + children, + value, +}: { + children: React.ReactNode + value: SolveExercisePageContextValues +}) { + return ( + + {children} + + ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx new file mode 100644 index 0000000000..57924a3e52 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx @@ -0,0 +1,20 @@ +import React from 'react' +export function IOPreview({ firstTest }: { firstTest: TaskTest }) { + return ( +
+

+ The first{' '} + scenario is{' '} + {firstTest.name}. +

+

+ We'll run{' '} + + {firstTest.function}({firstTest.params.join(', ')}) + {' '} + and expect it to return{' '} + {firstTest.expected} +

+
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx new file mode 100644 index 0000000000..94b0577e11 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx @@ -0,0 +1,14 @@ +import React from 'react' +export function StatePreview({ + firstTest, +}: { + firstTest: TaskTest + config: Config +}) { + return ( +

+ The first scenario{' '} + is {firstTest.name}. +

+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx new file mode 100644 index 0000000000..cf0918b8b7 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx @@ -0,0 +1,32 @@ +import React from 'react' +import { useMemo } from 'react' +import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' +import useTestStore from '../store/testStore' +import { StatePreview } from './StatePreview' +import { IOPreview } from './IOPreview' +import { useMountViewOrImage } from './useMountViewOrImage' + +export function _TaskPreview({ exercise }: { exercise: Exercise }) { + const firstTest = useMemo(() => exercise.tasks[0].tests[0], [exercise.tasks]) + const { testSuiteResult, previousTestSuiteResult } = useTestStore() + + const viewContainerRef = useMountViewOrImage({ + config: exercise.config, + taskTest: firstTest, + }) + + if (testSuiteResult || previousTestSuiteResult) return null + + return ( +
+ {exercise.config.testsType === 'io' ? ( + + ) : ( + + )} +
+
+ ) +} + +export const TaskPreview = wrapWithErrorBoundary(_TaskPreview) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/useMountViewOrImage.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/useMountViewOrImage.tsx new file mode 100644 index 0000000000..2d03c28a11 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/useMountViewOrImage.tsx @@ -0,0 +1,69 @@ +import React from 'react' +import { useRef, useEffect, useMemo } from 'react' +import { getAndInitializeExerciseClass } from '../utils/exerciseMap' + +export function useMountViewOrImage({ + config, + taskTest, + result, +}: { + config: Config + taskTest: TaskTest + result?: PreviousTestResult +}) { + if (!taskTest) return + const exercise = useMemo( + () => getAndInitializeExerciseClass(config), + [config] + ) + + ;(taskTest.setupFunctions || []).forEach((functionData) => { + let [functionName, params] = functionData + if (!params) { + params = [] + } + if (!exercise) return + exercise[functionName](...params) + }) + + const viewContainerRef = useRef(null) + + useEffect(() => { + if (!viewContainerRef.current) return + if (exercise && exercise.getView()) { + const view = exercise.getView() + + if (viewContainerRef.current.children.length > 0) { + const oldView = viewContainerRef.current.children[0] as HTMLElement + document.body.appendChild(oldView) + oldView.style.display = 'none' + } + + // on each result change, clear out view-container + viewContainerRef.current.innerHTML = '' + viewContainerRef.current.appendChild(view) + view.style.display = 'block' + } else { + let img + if (viewContainerRef.current.children.length > 0) { + img = viewContainerRef.current.children[0] as HTMLElement + } else { + img = document.createElement('div') + Object.assign(img.style, { + width: '100%', + height: '100%', + backgroundSize: '90%', + backgroundRepeat: 'no-repeat', + backgroundColor: 'white', + backgroundPosition: 'center', + }) + viewContainerRef.current.appendChild(img) + } + img.style.backgroundImage = `url('/exercise-images/${ + taskTest.imageSlug ?? 'rock-paper-scissors/paper-paper.png' + }')` + } + }, [result]) + + return viewContainerRef +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/TaskList.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/TaskList.tsx new file mode 100644 index 0000000000..3451c23468 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/TaskList.tsx @@ -0,0 +1,36 @@ +import React from 'react' +import LottieAnimation from '@/components/bootcamp/common/LottieAnimation' +import useTaskStore from '../store/taskStore/taskStore' +import confettiAnimation from '@/../animations/confetti.json' + +export function TaskList({ tasks }: { tasks: Task[] }) { + const { setCurrentTaskIndex } = useTaskStore() + return tasks.map((task, idx) => ( + setCurrentTaskIndex(idx)} + task={task} + key={`task-${idx}`} + /> + )) +} + +function Task({ task, onClick }: { task: Task; onClick: () => void }) { + return ( +
+
+ + + + {task.status == 'completed' && ( + + )} +
+ + +
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/Tasks.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/Tasks.tsx new file mode 100644 index 0000000000..ae9fc64376 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/Tasks.tsx @@ -0,0 +1,88 @@ +import React from 'react' +import useTaskStore from '../store/taskStore/taskStore' +import { FinishLessonModal } from '@/components/bootcamp/modals/FinishLessonModal/FinishLessonModal' +import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' +import { TaskList } from './TaskList' +import { assembleClassNames } from '@/utils/assemble-classnames' +import { FinishLessonModalContextWrapper } from '@/components/bootcamp/modals/FinishLessonModal/FinishLessonModalContextWrapper' +import { useTasks } from './useTasks' +import { useContext } from 'react' +import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' + +export type TaskType = { + status: 'completed' | 'active' + uuid: string + description: string +} + +function _Tasks() { + const { + tasks, + numberOfTasks, + numberOfCompletedTasks, + areAllTasksCompleted, + wasFinishLessonModalShown, + setWasFinishLessonModalShown, + } = useTaskStore() + + const { solution } = useContext(SolveExercisePageContext) + + const { + handleCompleteSolution, + isFinishModalOpen, + setIsFinishModalOpen, + modalView, + nextExerciseData, + } = useTasks({ + areAllTasksCompleted, + wasFinishLessonModalShown, + setWasFinishLessonModalShown, + }) + + if (!tasks) return null + return ( +
+
+

+ Your Tasks +

+
+ {numberOfCompletedTasks}/{numberOfTasks} +
+
+
+ +
+ + {solution.status === 'in_progress' && ( + <> + + {areAllTasksCompleted && ( + + + + )} + + )} +
+ ) +} + +export const Tasks = wrapWithErrorBoundary(_Tasks) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/completeSolution.ts b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/completeSolution.ts new file mode 100644 index 0000000000..ffeb43e1f1 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/completeSolution.ts @@ -0,0 +1,40 @@ +export async function completeSolution( + url: string +): Promise<{ next_exercise: NextExercise }> { + const response = await fetch(url, { + method: 'PATCH', + headers: { + 'Content-Type': 'application/json', + }, + body: null, + }) + + if (!response.ok) { + throw new Error('Failed to complete solution') + } + + return response.json() +} + +export type NextExercise = { + slug: string + title: string + description: string + project: { + slug: string + title: string + description: string + } +} + +// example +// { +// "slug": "manual-solve", +// "title": "Manually solve a maze", +// "description": "Manually solve a maze", +// "project": { +// "slug": "maze", +// "title": "Maze", +// "description": "Use then implement a basic maze" +// } +// } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/launchConfetti.ts b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/launchConfetti.ts new file mode 100644 index 0000000000..f600fbab38 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/launchConfetti.ts @@ -0,0 +1,58 @@ +import confetti from 'canvas-confetti' + +let confettiCanvas: HTMLCanvasElement | null = null +let myConfetti: any + +function setupCanvas() { + if (!confettiCanvas) { + confettiCanvas = document.createElement('canvas') + Object.assign(confettiCanvas.style, { + position: 'fixed', + top: '0', + left: '0', + width: '100%', + height: '100%', + pointerEvents: 'none', + zIndex: '9999', + }) + + document.body.appendChild(confettiCanvas) + + myConfetti = confetti.create(confettiCanvas, { resize: true }) + } +} + +export function launchConfetti() { + setupCanvas() + + const duration = 300 + const end = Date.now() + duration + const colors = ['#FE3C00', '#AFC8F3', '#4C2E55', '#E9DE3F', '#BEEEAB'] + + function createConfetti(originX: number) { + myConfetti({ + particleCount: 7, + angle: originX === 0 ? 60 : 120, + spread: 50, + origin: { x: originX, y: 1 }, + colors: colors, + }) + } + + ;(function frame() { + createConfetti(0) + createConfetti(1) + + if (Date.now() < end) { + requestAnimationFrame(frame) + } + })() +} + +export function cleanupCanvas() { + if (confettiCanvas) { + document.body.removeChild(confettiCanvas) + confettiCanvas = null + myConfetti = null + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/useTasks.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/useTasks.tsx new file mode 100644 index 0000000000..bc609925bc --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/useTasks.tsx @@ -0,0 +1,67 @@ +import React from 'react' +import { useState, useContext, useCallback, useRef, useEffect } from 'react' +import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' +import { type NextExercise, completeSolution } from './completeSolution' +import type { TaskStore } from '../store/taskStore/taskStore' +import { useLogger } from '@/components/common/hooks/useLogger' + +export function useTasks({ + areAllTasksCompleted, + wasFinishLessonModalShown, + setWasFinishLessonModalShown, +}: Pick< + TaskStore, + | 'areAllTasksCompleted' + | 'wasFinishLessonModalShown' + | 'setWasFinishLessonModalShown' +>) { + const [isFinishModalOpen, setIsFinishModalOpen] = useState(false) + const [nextExerciseData, setNextExerciseData] = useState( + null + ) + const [modalView, setModalView] = useState<'initial' | 'completedExercise'>( + 'initial' + ) + const { + links: { completeSolution: completeSolutionLink }, + } = useContext(SolveExercisePageContext) + + // Setup stage means stores are being set up - so we are in the initialising state in the lifecycle of the app + // see useSetupStores.ts + // here we care about areAllTasksCompleted + // so we check if that is undefined - hasn't been set yet, or boolean - has been set + const isSetupStage = useRef(true) + + useEffect(() => { + // Don't show FinishLessonModal on page-revisit + if (isSetupStage.current && areAllTasksCompleted !== undefined) { + isSetupStage.current = false + } else { + if (areAllTasksCompleted && !wasFinishLessonModalShown) { + setIsFinishModalOpen(true) + setWasFinishLessonModalShown(true) + } + } + }, [areAllTasksCompleted, wasFinishLessonModalShown]) + + const handleCompleteSolution = useCallback(async () => { + try { + const completedData = await completeSolution(completeSolutionLink) + setNextExerciseData(completedData.next_exercise) + if (!isFinishModalOpen) { + setIsFinishModalOpen(true) + } + setModalView('completedExercise') + } catch (e) { + console.error('Error completing solution: ', e) + } + }, [completeSolutionLink, nextExerciseData, isFinishModalOpen]) + + return { + modalView, + isFinishModalOpen, + handleCompleteSolution, + setIsFinishModalOpen, + nextExerciseData, + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/CodeRun.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/CodeRun.tsx new file mode 100644 index 0000000000..b1295f7ee9 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/CodeRun.tsx @@ -0,0 +1,10 @@ +import React from 'react' +export function CodeRun({ codeRun }: { codeRun: string }) { + if (!codeRun || codeRun.length === 0) return null + return ( + <> +
Code run:
+

{codeRun}

+ + ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx new file mode 100644 index 0000000000..f322537664 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx @@ -0,0 +1,28 @@ +import React from 'react' +import { CodeRun } from './CodeRun' +import { IOTestResultView } from './IOTestResultView' +import { StateTestResultView } from './StateTestResultView' +import type { ProcessedExpect } from './useInspectedTestResultView' + +export function FailInfo({ + result, + firstFailingExpect, +}: { + result: NewTestResult + firstFailingExpect: ProcessedExpect | null +}) { + return ( +
+ + {firstFailingExpect ? ( + firstFailingExpect.testsType === 'state' ? ( + + ) : ( + + ) + ) : null} +
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/IOTestResultView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/IOTestResultView.tsx new file mode 100644 index 0000000000..b40e46c578 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/IOTestResultView.tsx @@ -0,0 +1,41 @@ +import React from 'react' +import type { Change } from 'diff' + +export function IOTestResultView({ diff }: { diff: Change[] }) { + return ( +
+
Expected:
+

+ {diff.map((part, index) => + !part.added ? ( + + {part.value} + + ) : null + )} +

+
Actual:
+

+ {diff.map((part, index) => + !part.removed ? ( + + {part.value} + + ) : null + )} +

+
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx new file mode 100644 index 0000000000..7aa97903ae --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx @@ -0,0 +1,71 @@ +import React from 'react' +import { assembleClassNames } from '@/utils/assemble-classnames' +import Scrubber from '../Scrubber/Scrubber' +import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' +import { + useInspectedTestResultView, + type ProcessedExpect, +} from './useInspectedTestResultView' +import { FailInfo } from './FailInfo' +import { PassMessage } from './PassMessage' + +function _InspectedTestResultView() { + const { result, viewContainerRef, firstFailingExpect } = + useInspectedTestResultView() + + if (!result) return null + + return ( +
+ + +
+
+ ) +} + +export const InspectedTestResultView = wrapWithErrorBoundary( + _InspectedTestResultView +) + +function InspectedTestResultViewLHS({ + result, + firstFailingExpect, +}: { + result: NewTestResult + firstFailingExpect: ProcessedExpect | null +}) { + return ( +
+
+

+ Scenario: {result.name} - {result.status} +

+ + {result.status === 'fail' ? ( + + ) : ( + + )} +
+ +
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/PassMessage.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/PassMessage.tsx new file mode 100644 index 0000000000..85d5f94a8e --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/PassMessage.tsx @@ -0,0 +1,148 @@ +import React from 'react' +import { useContext } from 'react' +import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' + +export function PassMessage({ testIdx }: { testIdx: number }) { + const { + exercise: { + config: { title }, + }, + } = useContext(SolveExercisePageContext) + return ( +

+ {congratsMessages[stringToHash(title, testIdx)]} +

+ ) +} + +// function seededRandom(seed: number): () => number { +// const MAX = 2147483647; +// let s = seed % MAX; +// return () => { +// s = (s * 16807) % MAX; +// return (s - 1) / (MAX - 1); +// }; +// } + +// function shuffle(array: T[], seed: number): T[] { +// const random = seededRandom(seed); +// const result = array.slice(); +// for (let i = result.length - 1; i > 0; i--) { +// const j = Math.floor(random() * (i + 1)); +// [result[i], result[j]] = [result[j], result[i]]; +// } +// return result; +// } + +function stringToHash(input: string, testIdx: number): number { + const PRIME = 31 + let hash = 0 + + for (let i = 0; i < input.length; i++) { + hash = + (hash * PRIME + input.charCodeAt(i) + testIdx) % congratsMessages.length + } + + return hash +} + +// ty djipity +const congratsMessages = [ + 'Well done!', + 'Nice work!', + 'Fantastic job!', + 'Amazing effort!', + 'Great achievement!', + 'Congratulations!', + "You're awesome!", + 'Keep it up!', + 'Way to go!', + 'Outstanding performance!', + 'Impressive skills!', + 'Bravo!', + 'Excellent work!', + 'You nailed it!', + 'Top-notch effort!', + 'Remarkable job!', + 'You crushed it!', + 'Phenomenal work!', + "You're a star!", + 'Keep shining!', + 'Exceptional performance!', + 'Amazing dedication!', + 'You did it!', + 'Superb work!', + 'Hats off to you!', + "You're incredible!", + 'Keep soaring!', + 'Great going!', + 'Terrific job!', + 'Wonderful effort!', + "You're on fire!", + 'Unbelievable talent!', + "You're unstoppable!", + "You're a rockstar!", + 'Keep up the amazing work!', + 'A round of applause!', + 'Spectacular work!', + 'Fantastic accomplishment!', + "You're the best!", + 'Brilliant job!', + 'Incredible achievement!', + "You're crushing it!", + 'Keep the momentum going!', + "You're a legend!", + "You're extraordinary!", + 'Superb achievement!', + 'Kudos to you!', + "You're one of a kind!", + "You're making it happen!", + 'What a pro!', + 'You deserve it!', + "You're unstoppable!", + "You're an inspiration!", + "You're amazing!", + 'Keep the streak alive!', + "You're shining bright!", + "You're unbeatable!", + "You're making waves!", + 'You outdid yourself!', + "You're a winner!", + "You're phenomenal!", + "You're absolutely brilliant!", + "You're unstoppable!", + 'Keep dazzling us!', + "You're one in a million!", + 'You set the bar high!', + "You're achieving greatness!", + "You're a true champion!", + "You're awe-inspiring!", + 'Keep blazing trails!', + "You're making history!", + "You're exceptional!", + "You're a visionary!", + "You're lighting up the path!", + "You're raising the standard!", + "You're beyond amazing!", + "You're truly gifted!", + "You're unmatched!", + "You're redefining success!", + "You're a trendsetter!", + "You're at the top of your game!", + "You're magnificent!", + "You're unstoppable!", + "You're writing your legacy!", + "You're an overachiever!", + "You're a miracle worker!", + "You're sensational!", + "You're pure excellence!", + "You're radiating greatness!", + "You're a standout!", + "You're turning heads!", + "You're rewriting the rules!", + "You're redefining awesome!", + "You're showing the way!", + "You're world-class!", + "You're leading the charge!", + "You're unstoppable magic!", +] diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/StateTestResultView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/StateTestResultView.tsx new file mode 100644 index 0000000000..41258957e4 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/StateTestResultView.tsx @@ -0,0 +1,13 @@ +import React from 'react' +export function StateTestResultView({ + descriptionHtml, +}: { + descriptionHtml: string +}) { + return ( +
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx new file mode 100644 index 0000000000..3e7e9c114e --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx @@ -0,0 +1,72 @@ +import React from 'react' +import { assembleClassNames } from '@/utils/assemble-classnames' +import useTestStore from '../store/testStore' +import useEditorStore from '../store/editorStore' +import type { InformationWidgetData } from '../CodeMirror/extensions/end-line-information/line-information' +import { useShouldAnimate } from './useShouldAnimate' + +const TRANSITION_DELAY = 0.2 + +export function TestResultsButtons() { + const { testSuiteResult, setInspectedTestResult, inspectedTestResult } = + useTestStore() + const { setInformationWidgetData } = useEditorStore() + + const { shouldAnimate } = useShouldAnimate(testSuiteResult) + + if (!testSuiteResult) return null + return ( +
+ {testSuiteResult.tests.map((test, idx) => { + return ( + + ) + })} +
+ ) +} + +export function handleSetInspectedTestResult({ + testResult, + setInformationWidgetData, + setInspectedTestResult, +}: { + testResult: NewTestResult + setInspectedTestResult: (test: NewTestResult) => void + setInformationWidgetData: (data: InformationWidgetData) => void +}) { + setInspectedTestResult(testResult) + if (testResult.frames.length === 1) { + const frame = testResult.frames[0] + setInformationWidgetData({ + html: frame.description, + line: frame.line, + status: 'SUCCESS', + }) + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/useInspectedTestResultView.ts b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/useInspectedTestResultView.ts new file mode 100644 index 0000000000..04e288eabd --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/useInspectedTestResultView.ts @@ -0,0 +1,133 @@ +import React from 'react' +import { diffWords, type Change } from 'diff' +import { useRef, useEffect, useMemo } from 'react' +import useEditorStore from '../store/editorStore' +import useTestStore from '../store/testStore' + +export type ProcessedExpect = { + diff: Change[] + testsType: TestsType + actual: any + pass: boolean + label?: string + descriptionHtml?: string + note?: string + expected?: any +} + +export type ProcessedExpects = ProcessedExpect[] + +export function useInspectedTestResultView() { + const { inspectedTestResult: result } = useTestStore() + const { + setHighlightedLine, + setHighlightedLineColor, + setInformationWidgetData, + setShouldShowInformationWidget, + setUnderlineRange, + } = useEditorStore() + const viewContainerRef = useRef(null) + + useEffect(() => { + if (!result) return + + if (!viewContainerRef.current) return + + if (result.view) { + if (viewContainerRef.current.children.length > 0) { + const oldView = viewContainerRef.current.children[0] as HTMLElement + document.body.appendChild(oldView) + oldView.style.display = 'none' + } + + // on each result change, clear out view-container + viewContainerRef.current.innerHTML = '' + viewContainerRef.current.appendChild(result.view) + result.view.style.display = 'block' + } else { + let img + if (viewContainerRef.current.children.length > 0) { + img = viewContainerRef.current.children[0] as HTMLElement + } else { + img = document.createElement('div') + img.style.width = '100%' + img.style.height = '100%' + img.style.backgroundSize = '90%' + img.style.backgroundRepeat = 'no-repeat' + img.style.backgroundColor = 'white' + img.style.backgroundPosition = 'center' + viewContainerRef.current.appendChild(img) + } + img.style.backgroundImage = `url('/exercise-images/${result.imageSlug}')` + } + }, [result]) + + const processedExpects = useMemo( + () => processExpects(result), + [result?.expects] + ) + const firstFailingExpect = useMemo( + () => getfirstFailingExpect(result), + [result?.expects] + ) + + return { processedExpects, firstFailingExpect, viewContainerRef, result } +} + +function getfirstFailingExpect( + result: NewTestResult | null +): ProcessedExpect | null { + if (!result) return null + for (const expect of result.expects) { + if (expect.pass === false) { + if (expect.testsType === 'state') { + return { + descriptionHtml: expect.descriptionHtml, + testsType: expect.testsType, + actual: expect.actual, + pass: expect.pass, + diff: [], + } + } + // io expect + const { expected, actual } = expect + return { + ...expect, + diff: getDiffOfExpectedAndActual(expected, actual), + } + } + } + return null +} + +function processExpects(result: NewTestResult | null): ProcessedExpects { + if (!result) return [] + return result.expects.map((expect) => { + if (expect.testsType === 'state') { + // state expect + return { + descriptionHtml: expect.descriptionHtml, + testsType: 'state', + actual: expect.actual, + pass: expect.pass, + diff: [], + } + } + + // io expect + const { expected, actual } = expect + return { + ...expect, + diff: getDiffOfExpectedAndActual(expected, actual), + } + }) +} + +export function getDiffOfExpectedAndActual( + expected: any, + actual: any +): Change[] { + expected = expected ?? '[null]' + actual = actual ?? "[Your function didn't return anything]" + return diffWords(expected.toString(), actual.toString()) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/useShouldAnimate.ts b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/useShouldAnimate.ts new file mode 100644 index 0000000000..c4b1695597 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/useShouldAnimate.ts @@ -0,0 +1,14 @@ +import { useState, useEffect } from 'react' + +export function useShouldAnimate( + testSuiteResult: TestSuiteResult | null +) { + const [shouldAnimate, setShouldAnimate] = useState(false) + + useEffect(() => { + if (!testSuiteResult) return + setShouldAnimate(true) + }, [testSuiteResult]) + + return { shouldAnimate } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/Exercise.ts b/app/javascript/components/bootcamp/SolveExercisePage/exercises/Exercise.ts new file mode 100644 index 0000000000..d4247aa7cd --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/Exercise.ts @@ -0,0 +1,44 @@ +import type { Animation } from '../AnimationTimeline/AnimationTimeline' +import type { ExternalFunction } from '@/interpreter/executor' + +export abstract class Exercise { + public availableFunctions!: ExternalFunction[] + public animations: Animation[] = [] + public abstract getState(): any | null + // allow dynamic method access + [key: string]: any + + protected view!: HTMLElement + protected container!: HTMLElement + + public constructor(private slug: String) { + this.createView() + } + + public wrapCode(code: string) { + return code + } + + public lineNumberOffset = 0 + + public addAnimation(animation: Animation) { + this.animations.push(animation) + } + + protected createView() { + const cssClass = `exercise-${this.slug}` + this.view = document.createElement('div') + this.view.id = `${cssClass}-${Math.random().toString(36).substr(2, 9)}` + this.view.classList.add('exercise-container') + this.view.classList.add(cssClass) + this.view.style.display = 'none' + document.body.appendChild(this.view) + + this.container = document.createElement('div') + this.view.appendChild(this.container) + } + + public getView(): HTMLElement { + return this.view + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/DrawExercise.tsx b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/DrawExercise.tsx new file mode 100644 index 0000000000..a86c93faf2 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/DrawExercise.tsx @@ -0,0 +1,318 @@ +import React from 'react' +import { Exercise } from '../Exercise' +import { rToA } from './utils' +import * as Shapes from './shapes' +import type { ExecutionContext } from '@/interpreter/executor' + +class Shape { + public constructor(public element: HTMLElement) {} +} + +class Rectangle extends Shape { + public constructor( + public x: number, + public y: number, + public width: number, + public height: number, + element: HTMLElement + ) { + super(element) + } +} + +class Circle extends Shape { + public constructor( + public x: number, + public y: number, + public radius: number, + element: HTMLElement + ) { + super(element) + } +} + +class Triangle extends Shape { + public constructor( + public x1: number, + public y1: number, + public x2: number, + public y2: number, + public x3: number, + public y3: number, + element: HTMLElement + ) { + super(element) + } +} + +export default class DrawExercise extends Exercise { + private canvas: HTMLDivElement + private shapes: Shape[] = [] + + private penColor = '#333333' + private fillColor = '#ff0000' + + constructor() { + super('draw') + + Object.assign(this.view.style, { + backgroundColor: '#fafaff', + display: 'none', + }) + + const grid = document.createElement('div') + grid.classList.add('bg-grid') + this.view.appendChild(grid) + + this.canvas = document.createElement('div') + this.canvas.classList.add('canvas') + this.view.appendChild(this.canvas) + } + + public getState() { + return {} + } + public numElements() { + return this.shapes.length + } + public getRectAt(x: number, y: number, width: number, height: number) { + return this.shapes.find((shape) => { + if (shape instanceof Rectangle) { + return ( + shape.x == x && + shape.y == y && + shape.width == width && + shape.height == height + ) + } + }) + } + + public changePenColor(executionCtx: ExecutionContext, color: string) { + this.penColor = color + } + public changeFillColor(executionCtx: ExecutionContext, color: string) { + this.fillColor = color + } + + public rect( + executionCtx: ExecutionContext, + x: number, + y: number, + width: number, + height: number + ): Rectangle { + const [absX, absY, absWidth, absHeight] = [x, y, width, height].map((val) => + rToA(val) + ) + + const elem = Shapes.rect( + absX, + absY, + absWidth, + absHeight, + this.penColor, + this.fillColor + ) + this.canvas.appendChild(elem) + + const rect = new Rectangle(x, y, width, height, elem) + this.shapes.push(rect) + this.animateElement(executionCtx, elem, absX, absY) + return rect + } + + public circle( + executionCtx: ExecutionContext, + x: number, + y: number, + radius: number + ): Circle { + const [absX, absY, absRadius] = [x, y, radius].map((val) => rToA(val)) + + const elem = Shapes.circle( + absX, + absY, + absRadius, + this.penColor, + this.fillColor + ) + this.canvas.appendChild(elem) + + const circle = new Circle(x, y, radius, elem) + this.shapes.push(circle) + this.animateElement(executionCtx, elem, absX, absY) + return circle + } + + public triangle( + executionCtx: ExecutionContext, + x1: number, + y1: number, + x2: number, + y2: number, + x3: number, + y3: number + ): Triangle { + const [absX1, absY1, absX2, absY2, absX3, absY3] = [ + x1, + y1, + x2, + y2, + x3, + y3, + ].map((val) => rToA(val)) + + const elem = Shapes.triangle( + absX1, + absY1, + absX2, + absY2, + absX3, + absY3, + this.penColor, + this.fillColor + ) + this.canvas.appendChild(elem) + + const triangle = new Triangle(x1, y1, x2, y2, x3, y3, elem) + this.shapes.push(triangle) + this.animateElement(executionCtx, elem, absX1, absY1) + return triangle + } + + public move( + executionCtx: ExecutionContext, + id: string, + xTarget: number, + yTarget: number, + concurrent: boolean = false + ) { + const duration = 500 + // this.addAnimation(executionCtx, { + // targets: id, + // duration, + // transformations: { + // top: xTarget, + // left: yTarget, + // }, + // offset: executionCtx.time, + // }); + + // if (!concurrent) { + // executionCtx.time += duration; + // } + } + + public polygon(x: number, y: number, radius: number, sides: number): void { + // center the polygon + ;[x, y] = [x, y].map((val) => val - radius) + + const [absX, absY, absRadius] = [x, y, radius].map((val) => rToA(val)) + + const polygon = Shapes.polygon(absX, absY, absRadius, sides) + const duration = 15 + + // this.addAnimation(executionCtx, { + // targets: `#polygon${elementSerial}`, + // duration, + // transformations: { + // top: y, + // left: x, + // opacity: 1, + // }, + // offset: executionCtx.time, + // }); + + // executionCtx.time += duration; + } + + private animateElement( + executionCtx: ExecutionContext, + elem: HTMLElement, + absX: string, + absY: string + ) { + const duration = 1 + this.addAnimation({ + targets: `#${this.view.id} #${elem.id}`, + duration, + transformations: { + top: absY, + left: absX, + opacity: 1, + }, + offset: executionCtx.getCurrentTime(), + }) + + executionCtx.fastForward(duration) + } + + public clear(executionCtx: ExecutionContext) { + const duration = 1 + this.shapes.forEach((shape) => { + this.addAnimation({ + targets: `#${this.view.id} #${shape.element.id}`, + duration, + transformations: { + opacity: 0, + }, + offset: executionCtx.getCurrentTime(), + }) + }) + executionCtx.fastForward(duration) + + this.shapes = [] + } + + public availableFunctions = [ + { + name: 'rand', + func: (_: any, min: number, max: number) => { + return Math.floor(Math.random() * (max - min + 1)) + min + }, + description: 'Gives a random number between ${arg1} and ${arg2}.', + }, + { + name: 'rect', + func: this.rect.bind(this), + description: + 'It drew a rectangle at coordinates (${arg1}, ${arg2}) with a width of ${arg3} and a height of ${arg4}.', + }, + { + name: 'triangle', + func: this.triangle.bind(this), + description: 'Draws a triangle at the specified position.', + }, + { + name: 'polygon', + func: this.polygon.bind(this), + description: 'Draws a polygon at the specified position.', + }, + { + name: 'clear', + func: this.clear.bind(this), + description: 'Clears the canvas.', + }, + { + name: 'circle', + func: this.circle.bind(this), + description: 'Draws a circle at the specified position.', + }, + { + name: 'move', + func: this.move.bind(this), + description: 'Moves an element to the specified position.', + }, + { + name: 'change_pen_color', + func: this.changePenColor.bind(this), + description: 'Changes the pen color', + }, + { + name: 'change_fill_color', + func: this.changeFillColor.bind(this), + description: 'Changes the fill color', + }, + ] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/examples.md b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/examples.md new file mode 100644 index 0000000000..c02354d078 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/examples.md @@ -0,0 +1,136 @@ +## Draw 101 rects + +``` +let coords = 0 +rect(coords,coords,20,20) + +repeat(100){ +coords = coords + 1 +rect(coords,coords,20,20) +} +``` + +## animate the same rect + +``` +let coords = 0 + +repeat(100){ +coords = coords + 1 +rect(coords,coords,20,20) +redraw() +} +``` + +## draw 2 rects at the same time + +``` +let coords = 0 + +repeat(100){ +coords = coords + 1 +rect(coords + 10,coords+10,20,20) +rect(coords,coords,20,20) +redraw() +} +``` + +## bouncing from corners + +``` +let coords = 0 +let size = 20 +let delta = 1 + +repeat(1000){ + if(coords+size > 100 || coords < 0){ +delta = delta * -1 + } + +coords = coords + delta +rect(coords,coords,size,size) +redraw() +} +``` + +## ball moving up and down + +``` +let radius = 20 +let x = 50 +let y = 0 + radius +let delta = 1 + +repeat(1000) { + if (y + radius > 100 || y - radius < 0) { + delta = delta * -1 + } + y = y + delta + circle(x, y, radius) + redraw() +} +``` + +## bounce + +``` +let x = 20 +let y = 20 +let vy = 0 +let gravity = 0.5 +let bounce = 0.9 +let ground = 100 +let radius = 5 + +function abs(value) { + if (value < 0) { + return -value + } + return value +} + +while (abs(vy) >= 0.1 || y + radius < ground) { + vy = vy + gravity + y = y + vy + + if (y + radius >= ground) { + y = ground - radius + vy = vy * -bounce + } + + circle(x, y, radius) + redraw() +} +``` + +## use a move function + +``` +let r1 = rect(20,20,20,20) +let r2 = rect(30,30,30,30) + +move(r1, 100, 20, true) +move(r2, 30, 100, true) +``` + +## mixing singular and concurrent move + +``` +let r1 = rect(20,20,20,20) +let r2 = rect(30,30,30,30) +let r3 = rect(40,40,40,40) + +move(r1, 100, 20, true) +move(r2, 30, 100) +move(r3, 0, 0) +``` + +## draw many polygons on top of each other + +``` +let sides = 3 +repeat(30){ + polygon(30,30,30,sides) + sides = sides + 1 +} +``` diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/index.ts b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/index.ts new file mode 100644 index 0000000000..40c0721376 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/index.ts @@ -0,0 +1,3 @@ +import DrawExercise from './DrawExercise' + +export default DrawExercise diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/shapes.ts b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/shapes.ts new file mode 100644 index 0000000000..19e7037d99 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/shapes.ts @@ -0,0 +1,199 @@ +export function rect( + x: string, + y: string, + width: string, + height: string, + penColor: string, + backgroundColor: string +) { + const rect = document.createElement('div') + rect.id = `rect-${generateRandomId()}` + rect.style.border = `1px solid ${penColor}` + rect.style.backgroundColor = backgroundColor + rect.style.width = width + rect.style.height = height + rect.style.position = 'absolute' + + return rect +} + +export function circle( + x: string, + y: string, + radius: string, + penColor: string, + backgroundColor: string +) { + const circle = document.createElement('div') + circle.id = `circle-${generateRandomId()}` + circle.style.border = `1px solid ${penColor}` + circle.style.backgroundColor = backgroundColor + circle.style.width = `calc(2*${radius})` + circle.style.height = `calc(2*${radius})` + circle.style.position = 'absolute' + circle.style.borderRadius = '50%' + + return circle +} + +export function ellipse(x: number, y: number, width: number, height: number) { + /*const ellipse = document.createElement("div"); + ellipse.id = "ellipse-" + generateRandomId(); + ellipse.style.border = "1px solid black"; + ellipse.style.width = `${width}px`; + ellipse.style.height = `${height}px`; + ellipse.style.position = "absolute"; + ellipse.style.left = `${x - width / 2}px`; + ellipse.style.top = `${y - height / 2}px`; + ellipse.style.borderRadius = "50%"; + ellipse.style.opacity = "1"; + + return ellipse;*/ +} + +export function triangle( + x1: string, + y1: string, + x2: string, + y2: string, + x3: string, + y3: string, + penColor: string, + backgroundColor: string +) { + const [x1a, x2a, x3a] = [parseFloat(x1), parseFloat(x2), parseFloat(x3)] + const [y1a, y2a, y3a] = [parseFloat(y1), parseFloat(y2), parseFloat(y3)] + + const svgNS = 'http://www.w3.org/2000/svg' + const triangle = document.createElementNS(svgNS, 'svg') + + // Set the width and height of the div + triangle.style.position = 'absolute' + triangle.style.inset = '0' + triangle.style.backgroundColor = 'transparent' + + // Create the SVG element + triangle.setAttribute('viewBox', `0 0 100 100`) // Set viewBox for relative coordinates + triangle.setAttribute('overflow', 'visible') + + // Create the triangle polygon + const polygon = document.createElementNS(svgNS, 'polygon') + polygon.setAttribute('points', `${x1a},${y1a} ${x2a},${y2a} ${x3a},${y3a}`) + polygon.setAttribute('fill', backgroundColor) + polygon.setAttribute('stroke', penColor) + polygon.setAttribute('stroke-width', '1') + + // Append the triangle to the SVG + triangle.appendChild(polygon) + + // Create the canvas + // const canvas = document.createElement("canvas"); + // const canvasWidth = (widthPercentage) + padding ; // Add padding + // const canvasHeight = (heightPercentage) + padding ; // Add padding + + // canvas.setAttribute("width", maxXRel + 5) + // canvas.setAttribute("height", maxYRel + 5) + // canvas.style.width = "100%"; + // canvas.style.height = "100%"; + // canvas.style.position = "absolute"; + + // triangle.appendChild(canvas); + + // Draw the triangle on the canvas + // const context = canvas.getContext("2d"); + // if (!context) { + // console.error("Failed to get 2D context"); + // return; + // } + + // context.beginPath(); + // context.moveTo(x1Rel + padding, y1Rel + padding); + // context.lineTo(x2Rel + padding, y2Rel + padding); + // context.lineTo(x3Rel + padding, y3Rel + padding); + // context.closePath(); + + // // Style the triangle + // context.lineWidth = 2; // Adjusted line width + // context.strokeStyle = '#666666'; + // context.stroke(); + + // context.fillStyle = "#FFCC00"; + // context.fill(); + return triangle +} + +export function hexagon(x: number, y: number, size: number) { + const hexagon = document.createElement('div') + hexagon.id = 'hexagon-' + generateRandomId() + hexagon.style.width = `${size}px` + hexagon.style.height = `${(size * Math.sqrt(3)) / 2}px` + hexagon.style.position = 'absolute' + hexagon.style.left = `${x - size / 2}px` + hexagon.style.top = `${y - (size * Math.sqrt(3)) / 4}px` + hexagon.style.backgroundColor = 'black' + hexagon.style.clipPath = + 'polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%)' + hexagon.style.opacity = '1' + + return hexagon +} + +/** + * Draws a polygon where x and y are the top left corner of the bounding box + */ +export function polygon(x: number, y: number, radius: number, sides: number) { + if (sides < 3) throw new Error('A polygon must have at least 3 sides') + + const polygonDiv = document.createElement('div') + polygonDiv.id = 'polygon-' + generateRandomId() + polygonDiv.style.position = 'absolute' + polygonDiv.style.opacity = '0' + + const svgNamespace = 'http://www.w3.org/2000/svg' + const svg = document.createElementNS(svgNamespace, 'svg') + + const size = radius * 2 + svg.setAttribute('width', `${size}px`) + svg.setAttribute('height', `${size}px`) + svg.setAttribute('viewBox', `0 0 ${size} ${size}`) + + const polygonShape = document.createElementNS(svgNamespace, 'polygon') + + const points = [] + for (let i = 0; i < sides; i++) { + const angle = (i * 2 * Math.PI) / sides + const pointX = radius + radius * Math.cos(angle) + const pointY = radius + radius * Math.sin(angle) + points.push(`${pointX},${pointY}`) + } + + polygonShape.setAttribute('points', points.join(' ')) + polygonShape.setAttribute('fill', 'none') + polygonShape.setAttribute('stroke', 'black') + + svg.appendChild(polygonShape) + polygonDiv.appendChild(svg) + + polygonDiv.style.left = `${x}px` + polygonDiv.style.top = `${y}px` + + return polygonDiv +} + +function generateRandomId(): string { + return Math.random().toString(36).slice(2, 11) +} + +export function square(x: number, y: number, side: number) { + const rect = document.createElement('div') + rect.id = 'square-' + generateRandomId + rect.style.border = '1px solid black' + rect.style.width = `${side}px` + rect.style.height = `${side}px` + rect.style.position = 'absolute' + rect.style.left = `${x}px` + rect.style.top = `${y}px` + rect.style.opacity = '1' + + return rect +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/utils.ts b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/utils.ts new file mode 100644 index 0000000000..5dcfd2628a --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/utils.ts @@ -0,0 +1,121 @@ +/** + * Relative constant number the absolute number maps to + */ +export const RELATIVE_SIZE = 100 + +/** + * + * Convert relative x or y value to absolute value + */ +export function rToA(n: number) { + return `${(n / RELATIVE_SIZE) * 100}%` +} + +/** + * + * Convert absolute x or y value to absolute value + */ +export function aToR(n: number) { + console.group('HERE') + //return Math.round(n / (CANVAS_SIZE / RELATIVE_SIZE)); +} +/** + * + */ +export function relativeToAbsolute(x: number, y: number) { + return { x: rToA(x), y: rToA(y) } +} +/** + * + */ +export function absoluteToRelative(x: number, y: number) { + return { x: aToR(x), y: aToR(y) } +} + +// export function showMouseCoord(p: p5) { +// const mouseX = p.mouseX; +// const mouseY = p.mouseY; + +// let textX = mouseX + 10; +// let textY = mouseY + 10; + +// const textWidth = p.textWidth(`(${mouseX}, ${mouseY})`); +// const textHeight = 16; + +// // in case of overflow +// if (textX + textWidth > p.width) { +// textX = mouseX - textWidth - 10; +// } + +// if (textY + textHeight > p.height) { +// textY = mouseY - textHeight - 10; +// } + +// if (textX < 0) { +// textX = 10; +// } + +// if (textY < 0) { +// textY = 10; +// } + +// const { x, y } = absoluteToRelative(mouseX, mouseY); +// p.text(`(${x}, ${y})`, textX, textY); + +// p.stroke(0, 0, 0, 50); +// // xline +// p.line(mouseX, 0, mouseX, p.height); +// // yline +// p.line(0, mouseY, p.width, mouseY); +// } + +// export function isMouseOverTheCanvas(p: p5) { +// return p.mouseX >= 0 && p.mouseX <= p.width && p.mouseY >= 0 && p.mouseY <= p.height; +// } + +/** + * Converts the code string to a array of dictionary of function names and their arguments + */ +function parseCode(code: string): Array<{ [key: string]: number[] }> { + const result: Array<{ [key: string]: number[] }> = [] + + const lines = code.trim().split('\n') + + const regex = /(\w+)\(([\d\s,]+)\)/ + + for (const line of lines) { + const match = line.match(regex) + if (match) { + const functionName = match[1] + const args = match[2].split(',').map((arg) => parseFloat(arg.trim())) + const obj: { [key: string]: number[] } = {} + obj[functionName] = args + result.push(obj) + } + } + + return result +} + +/** + * Calls p5 function with arguments + */ +// export function drawThings(code: string, p: p5) { +// const parsedCode = parseCode(code); +// parsedCode.forEach((line) => { +// const functionName = Object.keys(line)[0]; +// const args = line[functionName]; +// const digestedArgs = mapRelativeArgsToAbsoluteArgs(functionName, args); +// // @ts-ignore +// p[functionName](...digestedArgs); +// }); +// } + +function mapRelativeArgsToAbsoluteArgs(functionName: string, args: number[]) { + switch (functionName) { + case 'rect': + return args.map(rToA) + default: + return args + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/view.tsx b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/view.tsx new file mode 100644 index 0000000000..9ea5dd4062 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/view.tsx @@ -0,0 +1,56 @@ +import React from 'react' +import { useEffect, useState } from 'react' +import { aToR } from './utils' + +export function DrawView() { + const [coordinates, setCoordinates] = useState({ + x: 0, + y: 0, + rawX: 0, + rawY: 0, + }) + + const handleMouseMove = ( + event: React.MouseEvent + ) => { + const rect = event.currentTarget.getBoundingClientRect() + const x = event.clientX - rect.left + const y = event.clientY - rect.top + + setCoordinates({ + x: aToR(Math.round(x)), + y: aToR(Math.round(y)), + rawX: Math.round(x), + rawY: Math.round(y), + }) + } + + useEffect(() => { + return () => { + const canvas = document.getElementById('drawing-canvas') + if (canvas) { + canvas.innerHTML = '' + } + } + }, []) + + return ( +
+
+
+ Relative coordinates: {coordinates.x}, {coordinates.y} +
+ Absolute coordinates: {coordinates.rawX}, {coordinates.rawY} +
+
+ ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/maze/MazeExercise.tsx b/app/javascript/components/bootcamp/SolveExercisePage/exercises/maze/MazeExercise.tsx new file mode 100644 index 0000000000..d83dc23a7c --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/maze/MazeExercise.tsx @@ -0,0 +1,322 @@ +import React from 'react' +import type { ExecutionContext } from '@/interpreter/executor' +import { Exercise } from '../Exercise' + +export default class MazeExercise extends Exercise { + private mazeLayout: number[][] = [] + private gridSize: number = 0 + private characterPosition: { x: number; y: number } = { x: 0, y: 0 } + private direction: string = 'down' + private angle: number = 180 + private duration: number = 200 + private characterSelector: string + private squareSize: number = 0 + private maze: HTMLElement + private character: HTMLElement + private cells: HTMLElement + + private startingAngles = { down: 180, up: 0, left: -90, right: 90 } + + public getState() { + return { + direction: this.direction, + position: [this.characterPosition.x, this.characterPosition.y], + } + } + + public getGameResult() { + return 'win' + } + + public constructor() { + super('maze') + + this.cells = document.createElement('div') + this.cells.classList.add('cells') + this.container.appendChild(this.cells) + + this.character = document.createElement('div') + this.character.classList.add('character') + this.container.appendChild(this.character) + this.characterSelector = `#${this.view.id} .character` + this.redrawMaze() + } + + private redrawMaze(): void { + this.cells.innerHTML = '' + this.view.style.setProperty('--gridSize', this.gridSize.toString()) + + for (let y = 0; y < this.mazeLayout.length; y++) { + for (let x = 0; x < this.mazeLayout[y].length; x++) { + const cell = document.createElement('div') + cell.classList.add('cell') + if (this.mazeLayout[y][x] === 1) { + cell.classList.add('blocked') + } else if (this.mazeLayout[y][x] === 2) { + cell.classList.add('start') + } else if (this.mazeLayout[y][x] === 3) { + cell.classList.add('target') + } else if (this.mazeLayout[y][x] === 4) { + cell.classList.add('bomb') + } + this.cells.appendChild(cell) + } + } + } + + public moveCharacter(executionCtx: ExecutionContext, dx: number, dy: number) { + const newX = this.characterPosition.x + dx + const newY = this.characterPosition.y + dy + + this.characterPosition.x = newX + this.characterPosition.y = newY + + this.animateMove(executionCtx) + } + + private animateMove(executionCtx: ExecutionContext) { + const yRow = this.mazeLayout[this.characterPosition.y] + if (!yRow) { + executionCtx.logicError('Character attempted to move out of bounds') + executionCtx.updateState('gameOver', true) + return + } + + const square = yRow[this.characterPosition.x] + // If we can't move, blow up + if (square === undefined) { + executionCtx.logicError('Character attempted to move out of bounds') + executionCtx.updateState('gameOver', true) + return + } + + // If we've hit a bad square, still animate but also animate color + if (square === 1) { + executionCtx.logicError('Character attempted to walk into a wall') + executionCtx.updateState('gameOver', true) + return + } else if (square === 3) { + this.gameOverWin(executionCtx) + } + + this.addAnimation({ + targets: this.characterSelector, + duration: this.duration, + transformations: { + left: `${this.characterPosition.x * this.squareSize}%`, + top: `${this.characterPosition.y * this.squareSize}%`, + }, + offset: executionCtx.getCurrentTime(), + }) + executionCtx.fastForward(this.duration) + } + + private gameOverWin(executionCtx: ExecutionContext) { + executionCtx.updateState('gameOver', true) + + this.addAnimation({ + targets: this.characterSelector, + duration: 200, + transformations: { + backgroundColor: `#0f0`, + }, + offset: executionCtx.getCurrentTime(), + }) + } + + private gameOverLoss(executionCtx: ExecutionContext) { + executionCtx.updateState('gameOver', true) + + this.addAnimation({ + targets: this.characterSelector, + duration: 200, + transformations: { + backgroundColor: `#f00`, + }, + offset: executionCtx.getCurrentTime(), + }) + } + + private animateRotate(executionCtx: ExecutionContext) { + this.addAnimation({ + targets: this.characterSelector, + duration: this.duration, + transformations: { + rotate: this.angle, + }, + offset: executionCtx.getCurrentTime(), + }) + executionCtx.fastForward(this.duration) + } + + public move(executionCtx: ExecutionContext) { + switch (this.direction) { + case 'up': + this.moveCharacter(executionCtx, 0, -1) + break + case 'down': + this.moveCharacter(executionCtx, 0, 1) + break + case 'right': + this.moveCharacter(executionCtx, 1, 0) + break + case 'left': + this.moveCharacter(executionCtx, -1, 0) + break + default: + console.log(`Unknown direction: ${this.direction}`) + } + } + + public turnLeft(executionCtx: ExecutionContext) { + this.angle -= 90 + + if (this.direction == 'up') { + this.direction = 'left' + } else if (this.direction == 'down') { + this.direction = 'right' + } else if (this.direction == 'right') { + this.direction = 'up' + } else if (this.direction == 'left') { + this.direction = 'down' + } + this.animateRotate(executionCtx) + } + + public turnRight(executionCtx: ExecutionContext) { + this.angle += 90 + + if (this.direction == 'up') { + this.direction = 'right' + } else if (this.direction == 'down') { + this.direction = 'left' + } else if (this.direction == 'right') { + this.direction = 'down' + } else if (this.direction == 'left') { + this.direction = 'up' + } + this.animateRotate(executionCtx) + } + + public canTurnLeft(_: ExecutionContext) { + const { x, y } = this.characterPosition + let newX = x + let newY = y + + if (this.direction === 'up') { + newX -= 1 + } else if (this.direction === 'down') { + newX += 1 + } else if (this.direction === 'left') { + newY += 1 + } else if (this.direction === 'right') { + newY -= 1 + } + + return ( + newX >= 0 && + newX < this.gridSize && + newY >= 0 && + newY < this.gridSize && + this.mazeLayout[newY][newX] !== 1 + ) + } + + public canTurnRight(_: ExecutionContext) { + const { x, y } = this.characterPosition + let newX = x + let newY = y + + if (this.direction === 'up') { + newX += 1 + } else if (this.direction === 'down') { + newX -= 1 + } else if (this.direction === 'left') { + newY -= 1 + } else if (this.direction === 'right') { + newY += 1 + } + + return ( + newX >= 0 && + newX < this.gridSize && + newY >= 0 && + newY < this.gridSize && + this.mazeLayout[newY][newX] !== 1 + ) + } + + private canMove(_: ExecutionContext) { + const { x, y } = this.characterPosition + let newX = x + let newY = y + + if (this.direction === 'up') { + newY -= 1 + } else if (this.direction === 'down') { + newY += 1 + } else if (this.direction === 'left') { + newX -= 1 + } else if (this.direction === 'right') { + newX += 1 + } + + return ( + newX >= 0 && + newX < this.gridSize && + newY >= 0 && + newY < this.gridSize && + this.mazeLayout[newY][newX] !== 1 + ) + } + + public setupGrid(layout: number[][]) { + this.mazeLayout = layout + this.gridSize = layout.length + this.squareSize = 100 / layout.length + this.redrawMaze() + } + public setupDirection(direction: string) { + this.direction = direction + this.angle = this.startingAngles[direction] + this.character.style.transform = `rotate(${this.angle}deg)` + } + public setupPosition(x: number, y: number) { + this.characterPosition = { x: x, y: y } + this.character.style.left = `${this.characterPosition.x * this.squareSize}%` + this.character.style.top = `${this.characterPosition.y * this.squareSize}%` + } + + public availableFunctions = [ + { + name: 'move', + func: this.move.bind(this), + description: 'Moves the character one step forward', + }, + { + name: 'turn_left', + func: this.turnLeft.bind(this), + description: 'Turns the character to the left', + }, + { + name: 'turn_right', + func: this.turnRight.bind(this), + description: 'Turns the character to the right', + }, + { + name: 'can_turn_left', + func: this.canTurnLeft.bind(this), + description: 'Checks if the character can turn left', + }, + { + name: 'can_turn_right', + func: this.canTurnRight.bind(this), + description: 'Checks if the character can turn right', + }, + { + name: 'can_move', + func: this.canMove.bind(this), + description: 'Checks if the character can move forward', + }, + ] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/wordle/WordleExercise.tsx b/app/javascript/components/bootcamp/SolveExercisePage/exercises/wordle/WordleExercise.tsx new file mode 100644 index 0000000000..7e5897609d --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/wordle/WordleExercise.tsx @@ -0,0 +1,111 @@ +import React from 'react' +import type { ExecutionContext } from '@/interpreter/executor' +import { Exercise } from '../Exercise' + +export default class WordleExercise extends Exercise { + private targetWord = 'apple' + private currentGuessIdx = 0 + private guessRows: HTMLElement[] = [] + private guessStates: string[][] = [] + + public getState() { + return {} + } + + public getGuessState1() { + return this.guessStates[0] + } + + public constructor() { + super('wordle') + this.setupView() + + this.handleGuess('emote') + this.handleGuess('prime') + this.handleGuess('apese') + } + + private handleGuess(guess: string) { + // Ensure input is a 5-character string + if (guess.length !== 5) { + console.error('Input must be exactly 5 characters.') + return + } + + const guessArray = guess.split('') + const states = this.statesFromGuess(guessArray) + this.drawGuess(guessArray, states) + } + + private statesFromGuess(guess: string[]) { + const states = [] + for (let i = 0; i < guess.length; i++) { + const char = guess[i].toLowerCase() + + if (char === this.targetWord[i]) { + states.push('correct') + } else if (this.targetWord.includes(char)) { + states.push('present') + } else { + states.push('absent') + } + } + return states + } + + // Updates the board with the guess + private drawGuess(guess: string[], states: string[]) { + // Get the current row + if (this.currentGuessIdx >= this.guessRows.length) { + console.error('No more guesses allowed.') + return + } + + const row = this.guessRows[this.currentGuessIdx] + const letters = row.getElementsByClassName('letter') + + const guessLetterStates = [] + // Compare input with the target word + guess.forEach((char, i) => { + const letter = letters[i] as HTMLElement + letter.textContent = char.toLowerCase() + letter.dataset.state = states[i] + guessLetterStates.push(states[i]) + }) + + // Store the states for checking later + this.guessStates.push(guessLetterStates) + + // Move to the next row + this.currentGuessIdx++ + } + + public availableFunctions = [] + + private setupView() { + const board = document.createElement('div') + board.classList.add('board') + this.container.appendChild(board) + + for (let i = 0; i < 6; i++) { + this.guessRows.push(this.createGuessRow()) + } + + this.guessRows.forEach((row) => { + board.appendChild(row) + }) + } + + private createGuessRow() { + const row = document.createElement('div') + row.classList.add('guess') + row.innerHTML = ` +
+
+
+
+
+ ` + return row + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/getFirstFailingOrFirstTest.ts b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/getFirstFailingOrFirstTest.ts new file mode 100644 index 0000000000..86c2fa20fb --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/getFirstFailingOrFirstTest.ts @@ -0,0 +1,23 @@ +/** + * Returns the first failing test or the first test if all tests pass + */ +export function getFirstFailingOrFirstTest( + testResults: TestSuiteResult, + inspectedTestResult: NewTestResult | null +): NewTestResult { + // if inspectedTestResult is already set and it fails again, keep it. + if ( + inspectedTestResult && + inspectedTestResult.status === 'fail' && + testResults.tests[inspectedTestResult.testIndex].status === 'fail' + ) { + return testResults.tests[inspectedTestResult.testIndex] + } else { + const firstFailingOrFirstIndex = Math.max( + testResults.tests.findIndex((test) => test.status === 'fail'), + 0 + ) + + return testResults.tests[firstFailingOrFirstIndex] + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/submitCode.ts b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/submitCode.ts new file mode 100644 index 0000000000..683799743d --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/submitCode.ts @@ -0,0 +1,34 @@ +export async function submitCode({ + code, + testResults, + postUrl, + readonlyRanges, +}: { + code: string + testResults: { + status: string + tests: { slug: string; status: string; actual: any }[] + } + postUrl: string + readonlyRanges: { from: number; to: number }[] +}) { + const response = await fetch(postUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + submission: { + code, + test_results: testResults, + readonly_ranges: readonlyRanges, + }, + }), + }) + + if (!response.ok) { + throw new Error('Failed to submit code') + } + + return response.json() +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/useOnRunCode.ts b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/useOnRunCode.ts new file mode 100644 index 0000000000..60d919df59 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/useOnRunCode.ts @@ -0,0 +1,126 @@ +import { useCallback } from 'react' +import { compile } from '@/interpreter/interpreter' +import useTestStore from '../../store/testStore' +import useEditorStore from '../../store/editorStore' +import useTaskStore from '../../store/taskStore/taskStore' +import { handleSetInspectedTestResult } from '../../TestResultsView/TestResultsButtons' +import generateAndRunTestSuite from '../../test-runner/generateAndRunTestSuite/generateAndRunTestSuite' +import { getAndInitializeExerciseClass } from '../../utils/exerciseMap' +import { showError } from '../../utils/showError' +import { submitCode } from './submitCode' +import { getFirstFailingOrFirstTest } from './getFirstFailingOrFirstTest' +import type { EditorView } from 'codemirror' +import { getCodeMirrorFieldValue } from '../../CodeMirror/getCodeMirrorFieldValue' +import { readOnlyRangesStateField } from '../../CodeMirror/extensions/read-only-ranges/readOnlyRanges' + +export function useOnRunCode({ + links, + config, +}: Pick & { + config: Config +}) { + const { setTestSuiteResult, setInspectedTestResult, inspectedTestResult } = + useTestStore() + + const { + setHighlightedLine, + setHighlightedLineColor, + setInformationWidgetData, + setShouldShowInformationWidget, + setHasCodeBeenEdited, + setUnderlineRange, + } = useEditorStore() + + const { markTaskAsCompleted, tasks } = useTaskStore() + + const onRunCode = useCallback( + (studentCode: string, editorView: EditorView | null) => { + if (!tasks) { + console.error('tasks are missing in useRunCode') + return + } + + const exercise = getAndInitializeExerciseClass(config) + + const compiled = compile(studentCode, { + externalFunctions: exercise?.availableFunctions, + language: 'JikiScript', + }) + + const error = compiled.error + + if (error) { + if (!error.location) { + return + } + + showError({ + error, + setHighlightedLine, + setHighlightedLineColor, + setInformationWidgetData, + setShouldShowInformationWidget, + setUnderlineRange, + }) + + setTestSuiteResult(null) + setInspectedTestResult(null) + + return + } + + const testResults = generateAndRunTestSuite({ + studentCode, + tasks, + config, + }) + + setTestSuiteResult(testResults) + markTaskAsCompleted(testResults) + + const automaticallyInspectedTest = getFirstFailingOrFirstTest( + testResults, + inspectedTestResult + ) + + handleSetInspectedTestResult({ + testResult: automaticallyInspectedTest, + setInspectedTestResult, + setInformationWidgetData, + }) + + // reset on successful test run + setHasCodeBeenEdited(false) + + submitCode({ + code: studentCode, + testResults: { + status: testResults.status, + tests: testResults.tests.map((test) => { + const firstFailingExpect = test.expects.find( + (e) => e.pass === false + ) + const actual = firstFailingExpect + ? firstFailingExpect.testsType === 'io' + ? firstFailingExpect.actual + : firstFailingExpect.descriptionHtml + : null + return { + slug: test.slug, + status: test.status, + actual, + } + }), + }, + postUrl: links.postSubmission, + readonlyRanges: getCodeMirrorFieldValue( + editorView, + readOnlyRangesStateField + ), + }) + }, + [setTestSuiteResult, tasks, inspectedTestResult] + ) + + return onRunCode +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useResize.tsx b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useResize.tsx new file mode 100644 index 0000000000..3c171859ac --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useResize.tsx @@ -0,0 +1,105 @@ +import React from 'react' +import { assembleClassNames } from '@/utils/assemble-classnames' +import { useLocalStorage } from '@uidotdev/usehooks' +import { useEffect, useRef, useState } from 'react' + +type Direction = 'horizontal' | 'vertical' + +type ResizableOptions = { + initialSize: number + direction: Direction + localStorageId: string + primaryMinSize?: number + secondaryMinSize?: number +} + +export function useResizablePanels({ + initialSize, + direction, + localStorageId, + primaryMinSize = 250, + secondaryMinSize = 250, +}: ResizableOptions) { + const [primarySize, setPrimarySize] = useLocalStorage( + localStorageId, + initialSize + ) + const [secondarySize, setSecondarySize] = useState( + (direction === 'horizontal' ? window.innerWidth : window.innerHeight) - + primarySize + ) + + const startSizeRef = useRef(primarySize) + + const handleMouseDown = (e: React.MouseEvent) => { + const containerSize = + direction === 'horizontal' ? window.innerWidth : window.innerHeight + const startCoordinate = direction === 'horizontal' ? e.clientX : e.clientY + + startSizeRef.current = primarySize + + const handleMouseMove = (moveEvent: MouseEvent) => { + const currentCoordinate = + direction === 'horizontal' ? moveEvent.clientX : moveEvent.clientY + const delta = currentCoordinate - startCoordinate + const newPrimarySize = Math.max( + primaryMinSize, + Math.min(startSizeRef.current + delta, containerSize - secondaryMinSize) + ) + + setPrimarySize(newPrimarySize) + setSecondarySize(containerSize - newPrimarySize) + } + + const handleMouseUp = () => { + document.removeEventListener('mousemove', handleMouseMove) + document.removeEventListener('mouseup', handleMouseUp) + } + + document.addEventListener('mousemove', handleMouseMove) + document.addEventListener('mouseup', handleMouseUp) + } + + const handleResize = () => { + const containerSize = + direction === 'horizontal' ? window.innerWidth : window.innerHeight + + const newPrimarySize = Math.min(primarySize, containerSize - 300) + setPrimarySize(newPrimarySize) + setSecondarySize(containerSize - newPrimarySize) + } + + useEffect(() => { + window.addEventListener('resize', handleResize) + + return () => { + window.removeEventListener('resize', handleResize) + } + }, [primarySize, direction]) + + return { + primarySize, + secondarySize, + handleMouseDown, + } +} + +export function Resizer({ + handleMouseDown, + direction, +}: { + handleMouseDown: (e: React.MouseEvent) => void + direction: Direction +}) { + return ( + + ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts new file mode 100644 index 0000000000..71f66dc3ad --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts @@ -0,0 +1,66 @@ +import { useLayoutEffect } from 'react' +import useEditorStore from '../store/editorStore' +import useTaskStore from '../store/taskStore/taskStore' +import useTestStore from '../store/testStore' + +export function useSetupStores({ + exercise, + code, +}: Pick) { + const { setDefaultCode } = useEditorStore() + const { initializeTasks } = useTaskStore() + const { setPreviousTestSuiteResult, setInspectedPreviousTestResult } = + useTestStore() + + useLayoutEffect(() => { + let previousTestSuiteResult: TestSuiteResult | null = + null + if (exercise.testResults) { + const tests = (() => { + const testArr = [] + let i = 0 + for (let taskInConfig of exercise.tasks) { + for (let testInConfig of taskInConfig.tests) { + const prevTest = exercise.testResults.tests[i] + if (testInConfig.slug === prevTest.slug) { + testArr.push({ + name: testInConfig.name, + testIndex: i, + slug: testInConfig.slug, + status: prevTest.status, + actual: prevTest.actual, + expected: testInConfig.expected, + codeRun: generateCodeRunString( + testInConfig.function, + testInConfig.params + ), + + testsType: exercise.config.testsType, + }) + } + i++ + } + } + return testArr + })() + + const firstFailingTest = tests.find((test) => test.status === 'fail') + setInspectedPreviousTestResult(firstFailingTest ?? tests[0]) + + previousTestSuiteResult = { + suiteName: exercise.config.title, + status: exercise.testResults.status, + tests, + } + setPreviousTestSuiteResult(previousTestSuiteResult) + } + + initializeTasks(exercise.tasks, previousTestSuiteResult) + setDefaultCode(code.code) + }, [exercise, code]) +} + +function generateCodeRunString(fn: string, params: any[]) { + if (!fn || !params) return '' + return `${fn}(${params.join(', ')})` +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/animationTimelineStore.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/animationTimelineStore.ts new file mode 100644 index 0000000000..3d05a3e27e --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/animationTimelineStore.ts @@ -0,0 +1,21 @@ +import { AnimationTimeline } from '../AnimationTimeline/AnimationTimeline' +import { createStoreWithMiddlewares } from './utils' + +// Might not need this whole store. +type AnimationTimelineStore = { + animationTimeline: AnimationTimeline | undefined + setAnimationTimeline: (animationTimeline: AnimationTimeline) => void +} + +const useAnimationTimelineStore = + createStoreWithMiddlewares( + (set) => ({ + animationTimeline: undefined, + setAnimationTimeline: (animationTimeline) => { + set({ animationTimeline }, false, 'exercise/setTestResults') + }, + }), + 'AnimationTimelineStore' + ) + +export default useAnimationTimelineStore diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/editorStore.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/editorStore.ts new file mode 100644 index 0000000000..7c91cba558 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/editorStore.ts @@ -0,0 +1,118 @@ +import type { InformationWidgetData } from '../CodeMirror/extensions/end-line-information/line-information' +import { INFO_HIGHLIGHT_COLOR } from '../CodeMirror/extensions/lineHighlighter' +import { createStoreWithMiddlewares } from './utils' + +type UnderlineRange = { from: number; to: number } | undefined + +type EditorStore = { + defaultCode: string + setDefaultCode: (defaultCode: string) => void + shouldAutoRunCode: boolean + setShouldAutoRunCode: (shouldAutoRunCode: boolean) => void + toggleShouldAutoRunCode: () => void + readonly: boolean + setReadonly: (readonly: boolean) => void + hasCodeBeenEdited: boolean + setHasCodeBeenEdited: (hasBeenEdited: boolean) => void + shouldShowInformationWidget: boolean + setShouldShowInformationWidget: (s: boolean) => void + toggleShouldShowInformationWidget: () => void + informationWidgetData: InformationWidgetData + setInformationWidgetData: (s: InformationWidgetData) => void + codeExecutionLevel: 'visual' | 'full' + setCodeExecutionLevel: (level: 'visual' | 'full') => void + toggleInformationWidget: () => void + underlineRange: UnderlineRange + setUnderlineRange: (range: UnderlineRange) => void + highlightedLine: number + setHighlightedLine: (highlightedLine: number) => void + highlightedLineColor: string + setHighlightedLineColor: (highlightedLine: string) => void + readonlyRanges: Array<{ from: number; to: number }> + setReadonlyRanges: (ranges: Array<{ from: number; to: number }>) => void +} + +const useEditorStore = createStoreWithMiddlewares( + (set) => ({ + defaultCode: '', + setDefaultCode: (defaultCode: string) => { + set({ defaultCode }, false, 'editor/setDefaultCode') + }, + shouldAutoRunCode: false, + setShouldAutoRunCode: (shouldAutoRunCode) => + set({ shouldAutoRunCode }, false, 'editor/setShouldAutoRunCode'), + toggleShouldAutoRunCode: () => { + set( + (state) => ({ shouldAutoRunCode: !state.shouldAutoRunCode }), + false, + 'editor/toggleShouldAutoRunCode' + ) + }, + readonly: false, + setReadonly: (hasCodeBeenEdited) => + set({ hasCodeBeenEdited }, false, 'editor/setHasCodeBeenEdited'), + hasCodeBeenEdited: false, + setHasCodeBeenEdited: (hasCodeBeenEdited) => + set({ hasCodeBeenEdited }, false, 'editor/setHasCodeBeenEdited'), + shouldShowInformationWidget: false, + setShouldShowInformationWidget: (shouldShowInformationWidget: boolean) => { + set( + { shouldShowInformationWidget }, + false, + 'editor/setShouldShowInformationWidget' + ) + }, + toggleShouldShowInformationWidget: () => { + set( + (state) => ({ + shouldShowInformationWidget: !state.shouldShowInformationWidget, + }), + false, + 'editor/toggleShouldShowInformationWidget' + ) + }, + informationWidgetData: { html: '', line: 0, status: 'SUCCESS' }, + setInformationWidgetData: ( + informationWidgetData: InformationWidgetData + ) => { + set( + { informationWidgetData }, + false, + 'editor/setShouldShowInformationWidget' + ) + }, + codeExecutionLevel: 'full', + setCodeExecutionLevel: (level: 'visual' | 'full') => { + set({ codeExecutionLevel: level }, false, 'editor/setCodeExecutionLevel') + }, + underlineRange: { from: 0, to: 0 }, + setUnderlineRange: (range) => { + set({ underlineRange: range }, false, 'editor/setUnderlineRange') + }, + toggleInformationWidget: () => { + set( + (state) => ({ + shouldShowInformationWidget: !state.shouldShowInformationWidget, + }), + false, + 'editor/toggleInformationWidget' + ) + }, + + highlightedLine: 0, + setHighlightedLine: (highlightedLine) => { + set({ highlightedLine }, false, 'exercise/setHighlightedLine') + }, + highlightedLineColor: INFO_HIGHLIGHT_COLOR, + setHighlightedLineColor: (highlightedLineColor) => { + set({ highlightedLineColor }, false, 'exercise/setHighlightedLineColor') + }, + readonlyRanges: [], + setReadonlyRanges: (readonlyRanges) => { + set({ readonlyRanges }, false, 'exercise/setReadonlyRanges') + }, + }), + 'EditorStore' +) + +export default useEditorStore diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/getInitialTasks.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/getInitialTasks.ts new file mode 100644 index 0000000000..641e509d81 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/getInitialTasks.ts @@ -0,0 +1,38 @@ +import { processTasks } from './processTasks' +import type { TaskStore } from './taskStore' + +export function getInitialTasks( + tasks: Omit[], + testResults: TestSuiteResult | null +) { + if (!testResults) { + return { + tasks: tasks.map((task, idx) => { + return { ...task, status: idx === 0 ? 'active' : 'inactive' } + }), + numberOfTasks: tasks.length, + numberOfCompletedTasks: 0, + activeTaskIndex: 0, + areAllTasksCompleted: false, + } + } else { + const tasksWithStatus: Task[] = tasks.map((task) => { + return { + ...task, + status: 'inactive', + } + }) + const processedTasks = processTasks( + { tasks: tasksWithStatus, activeTaskIndex: 0 } as TaskStore, + testResults + ) + + return { + tasks: processedTasks.updatedTasks, + numberOfTasks: tasks.length, + numberOfCompletedTasks: processedTasks.numberOfCompletedTasks, + activeTaskIndex: processedTasks.activeTaskIndex, + areAllTasksCompleted: processedTasks.areAllTasksCompleted, + } + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/handleMarkTaskAsCompleted.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/handleMarkTaskAsCompleted.ts new file mode 100644 index 0000000000..12bb5b9556 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/handleMarkTaskAsCompleted.ts @@ -0,0 +1,25 @@ +import { launchConfetti } from '../../Tasks/launchConfetti' +import { processTasks } from './processTasks' +import type { TaskStore } from './taskStore' + +export function handleMarkTaskAsCompleted( + state: TaskStore, + testResults: TestSuiteResult +) { + // once all tasks are completed, we don't need to do anything + // even if they break the tests, the tasks will remain completed + if (!state.tasks || !testResults || state.areAllTasksCompleted) return + + const taskData = processTasks(state, testResults) + if (!taskData) return + + // Launch confetti if all tasks are now completed but weren't before + if (taskData.areAllTasksCompleted && !state.areAllTasksCompleted) { + launchConfetti() + } + + return { + tasks: taskData.updatedTasks, + ...taskData, + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/processTasks.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/processTasks.ts new file mode 100644 index 0000000000..6eb60f5c1d --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/processTasks.ts @@ -0,0 +1,69 @@ +import type { TaskStore } from './taskStore' + +export function processTasks( + state: TaskStore, + testResults: TestSuiteResult +) { + const passingTests = new Set( + testResults.tests + .filter((test) => test.status === 'pass') + .map((test) => test.name) + ) + + if (!state || !state.tasks || state.tasks.length === 0) { + return { + updatedTasks: [], + numberOfCompletedTasks: 0, + areAllTasksCompleted: true, + activeTaskIndex: 0, + } + } + + const updatedTasks: Task[] = [] + let foundFirstInactiveTask = false + let numberOfCompletedTasks = state.numberOfCompletedTasks ?? 0 + let activeTaskIndex = state.activeTaskIndex + + for (let i = 0; i < state.tasks.length; i++) { + const task = state.tasks[i] + + // we don't want to degrade completed tasks to active if they were once completed + if (task.status === 'completed') { + updatedTasks.push(task) + continue + } + + // always set the task to completed if all tests are passing + if (task.tests.every((test) => passingTests.has(test.name))) { + updatedTasks.push({ ...task, status: 'completed' }) + numberOfCompletedTasks++ + continue + } + + const hasAnActiveTask = updatedTasks.some( + (task) => task.status === 'active' + ) + // if doesn't have active task, find the first inactive task and set it to active + if ( + !hasAnActiveTask && + !foundFirstInactiveTask && + task.status === 'inactive' + ) { + updatedTasks.push({ ...task, status: 'active' }) + activeTaskIndex = i + foundFirstInactiveTask = true + continue + } + + updatedTasks.push(task) + } + + const areAllTasksCompleted = numberOfCompletedTasks === updatedTasks.length + + return { + updatedTasks, + numberOfCompletedTasks, + areAllTasksCompleted, + activeTaskIndex, + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/taskStore.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/taskStore.ts new file mode 100644 index 0000000000..397147ad65 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/taskStore/taskStore.ts @@ -0,0 +1,71 @@ +import { createStoreWithMiddlewares } from '../utils' +import { getInitialTasks } from './getInitialTasks' +import { handleMarkTaskAsCompleted } from './handleMarkTaskAsCompleted' + +const useTaskStore = createStoreWithMiddlewares( + (set) => ({ + tasks: null, + numberOfTasks: 0, + numberOfCompletedTasks: 0, + wasFinishLessonModalShown: false, + areAllTasksCompleted: undefined, + activeTaskIndex: 0, + setWasFinishLessonModalShown: (wasFinishLessonModalShown) => { + set( + { wasFinishLessonModalShown }, + false, + 'exercise/setWasFinishLessonModalShown' + ) + }, + markTaskAsCompleted: (testResults) => { + set( + (state) => { + return handleMarkTaskAsCompleted(state, testResults) + }, + false, + 'exercise/markTaskAsCompleted' + ) + }, + initializeTasks: (tasks, testResults) => { + if (!tasks) { + console.warn('tasks are missing in store') + return + } + + const taskData = getInitialTasks(tasks, testResults) + set( + { + tasks: taskData.tasks as Task[], + numberOfTasks: taskData.numberOfTasks, + numberOfCompletedTasks: taskData.numberOfCompletedTasks, + areAllTasksCompleted: taskData.areAllTasksCompleted, + activeTaskIndex: taskData.activeTaskIndex, + }, + false, + 'exercise/initializeTasks' + ) + }, + setCurrentTaskIndex: (index) => { + set({ activeTaskIndex: index }, false, 'exercise/setCurrentTaskIndex') + }, + }), + 'TaskStore' +) + +export default useTaskStore + +export type TaskStore = { + tasks: Task[] | null + initializeTasks: ( + tasks: Omit[] | null, + testResults: TestSuiteResult | null + ) => void + markTaskAsCompleted: (testResults: TestSuiteResult) => void + numberOfTasks: number + areAllTasksCompleted: boolean | undefined + numberOfCompletedTasks: number + activeTaskIndex: number + wasFinishLessonModalShown: boolean + setWasFinishLessonModalShown: (wasFinishLessonModalShown: boolean) => void + setCurrentTaskIndex: (index: number) => void +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/testStore.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/testStore.ts new file mode 100644 index 0000000000..33147c6fbc --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/testStore.ts @@ -0,0 +1,50 @@ +import { createStoreWithMiddlewares } from './utils' + +type TestStore = { + inspectedTestResult: NewTestResult | null + setInspectedTestResult: (inspectedTestResult: NewTestResult | null) => void + inspectedPreviousTestResult: PreviousTestResult | null + setInspectedPreviousTestResult: ( + inspectedTestResult: PreviousTestResult | null + ) => void + testSuiteResult: TestSuiteResult | null + setTestSuiteResult: ( + testSuiteResult: TestSuiteResult | null + ) => void + previousTestSuiteResult: TestSuiteResult | null + setPreviousTestSuiteResult: ( + testSuiteResult: TestSuiteResult | null + ) => void +} + +const useTestStore = createStoreWithMiddlewares( + (set) => ({ + inspectedTestResult: null, + setInspectedTestResult: (inspectedTestResult) => { + set({ inspectedTestResult }, false, 'exercise/setTestResults') + }, + inspectedPreviousTestResult: null, + setInspectedPreviousTestResult: (inspectedPreviousTestResult) => { + set({ inspectedPreviousTestResult }, false, 'exercise/setTestResults') + }, + previousTestSuiteResult: null, + setPreviousTestSuiteResult: (previousTestSuiteResult) => { + set( + { previousTestSuiteResult }, + false, + 'exercise/setPreviousTestSuiteResult' + ) + }, + testSuiteResult: null, + setTestSuiteResult: (testSuiteResult) => { + set( + { testSuiteResult: testSuiteResult }, + false, + 'exercise/setTestSuiteResult' + ) + }, + }), + 'TestStore' +) + +export default useTestStore diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/types.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/types.ts new file mode 100644 index 0000000000..f534146054 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/types.ts @@ -0,0 +1,16 @@ +import type { Draft } from 'immer' + +export type StateWithMiddleware = [ + ['zustand/devtools', never], + ['zustand/immer', never] +] + +export type CreatedSetter = ( + value: T | Draft | ((draft: Draft) => T | Draft) +) => void + +export type StateSetter = ( + nextStateOrUpdater: Store | Partial | ((state: Draft) => void), + shouldReplace?: boolean | undefined, + action?: string | undefined +) => void diff --git a/app/javascript/components/bootcamp/SolveExercisePage/store/utils.ts b/app/javascript/components/bootcamp/SolveExercisePage/store/utils.ts new file mode 100644 index 0000000000..af6e95beb8 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/store/utils.ts @@ -0,0 +1,44 @@ +import { create } from 'zustand' +import { devtools } from 'zustand/middleware' +import { immer } from 'zustand/middleware/immer' +// TODO: Fix this, move this to global declaration file +import type { StateWithMiddleware, StateSetter } from './types' + +// TODO: Typing this is insanely complicated. Reduce complexity. + +export function createStoreWithMiddlewares( + config: (set: StateSetter, get: () => State, api: any) => State, + + storeName: string +) { + return create( + devtools(immer(config), { name: storeName }) + ) +} + +export function createSetter( + set: ( + updater: (state: State) => void, + replace?: boolean, + actionName?: string + ) => void, + key: Key +) { + return (input: State[Key] | ((draft: State[Key]) => State[Key])) => + set( + (state) => { + if (typeof input === 'function') { + state[key] = (input as Function)(state[key]) + } else { + state[key] = input + } + }, + false, + `exercise/set${capitalize(String(key))}` + ) +} + +function capitalize(str: string): string { + if (!str) return str + return str.charAt(0).toUpperCase() + str.slice(1) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/test-runner/README.md b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/README.md new file mode 100644 index 0000000000..31df2d0fe6 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/README.md @@ -0,0 +1,28 @@ +# A test in its simplest form is: + +```ts +import expect from "./expect"; +describe("Test suit name", (test) => { + test("test name", () => { + const actual = 1; + + const expects = [expect({ + actual, + testsType: "io", + name: "test name", + slug: "test-name", + }).toBe(1), ...]; + + return { + expectes, + codeRun: '' + } + }); +}); +``` + +Expect callback returns a matcher fn, which will return [`MatcherResult`][mr-location]. + +[`MatcherResult`][mr-location] is passed on + +[mr-location]: /types/Matchers.d.ts diff --git a/app/javascript/components/bootcamp/SolveExercisePage/test-runner/expect.ts b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/expect.ts new file mode 100644 index 0000000000..d26b40a4b6 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/expect.ts @@ -0,0 +1,62 @@ +import isEqual from 'lodash.isequal' + +export function expect({ + actual, + name, + slug, + descriptionHtml, + note, + testsType, +}: { + actual: any + name?: string + slug?: string + descriptionHtml?: string + note?: string + testsType: TestsType +}): Record MatcherResult> { + const returnObject: Omit = { + actual, + slug: slug ?? '', + name: name ?? '', + descriptionHtml, + note, + testsType, + } + return { + toExist() { + return { + ...returnObject, + pass: actual !== undefined && actual !== null, + } + }, + toBe(expected: any) { + return { + ...returnObject, + expected, + pass: actual === expected, + } + }, + toEqual(expected: any) { + return { + ...returnObject, + expected, + pass: isEqual(expected, actual), + } + }, + toBeGreaterThanOrEqual(expected: number) { + return { + ...returnObject, + expected, + pass: actual >= expected, + } + }, + toBeLessThanOrEqual(expected: number) { + return { + ...returnObject, + expected, + pass: actual <= expected, + } + }, + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/execGenericTest.ts b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/execGenericTest.ts new file mode 100644 index 0000000000..4cc9010369 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/execGenericTest.ts @@ -0,0 +1,42 @@ +import { evaluateFunction } from '@/interpreter/interpreter' +import { generateExpects } from './generateExpects' + +/** + This is of type TestCallback + */ +export function execGenericTest( + testData: TaskTest, + options: TestRunnerOptions +): ReturnType { + const params = testData.params || [] + + const evaluated = evaluateFunction( + options.studentCode, + { + language: 'JikiScript', + }, + testData.function, + ...params + ) + + if (evaluated.error) { + console.error('Evaluation error:', evaluated.error) + } + + const { value: actual, frames } = evaluated + + const codeRun = testData.function + '(' + params.join(', ') + ')' + + const expects = generateExpects(options.config.testsType, testData, { + actual, + }) + + return { + expects, + slug: testData.slug, + codeRun, + frames, + animationTimeline: null, + imageSlug: testData.imageSlug, + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/execProjectTest.ts b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/execProjectTest.ts new file mode 100644 index 0000000000..65f23d236b --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/execProjectTest.ts @@ -0,0 +1,50 @@ +import { interpret } from '@/interpreter/interpreter' +import { type Project } from '@/components/bootcamp/SolveExercisePage/utils/exerciseMap' +import type { Exercise } from '../../exercises/Exercise' +import { AnimationTimeline } from '../../AnimationTimeline/AnimationTimeline' +import { generateExpects } from './generateExpects' + +/** + This is of type TestCallback + */ +export function execProjectTest( + Project: Project, + testData: TaskTest, + options: TestRunnerOptions +): ReturnType { + const exercise: Exercise = new Project() + + ;(testData.setupFunctions || []).forEach((functionData) => { + let [functionName, params] = functionData + if (!params) { + params = [] + } + exercise[functionName](...params) + }) + + const evaluated = interpret(options.studentCode, { + externalFunctions: exercise.availableFunctions, + language: 'JikiScript', + }) + + const { frames } = evaluated + + const { animations } = exercise + const animationTimeline = + animations.length > 0 + ? new AnimationTimeline({}, frames).populateTimeline(animations) + : null + + const expects = generateExpects(options.config.testsType, testData, { + exercise, + }) + + return { + expects, + codeRun: '', + frames, + animationTimeline, + view: exercise.getView(), + slug: testData.slug, + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/generateAndRunTestSuite.ts b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/generateAndRunTestSuite.ts new file mode 100644 index 0000000000..9dc8563037 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/generateAndRunTestSuite.ts @@ -0,0 +1,26 @@ +import { describe } from '..' +import exerciseMap, { + type Project, +} from '@/components/bootcamp/SolveExercisePage/utils/exerciseMap' +import { execProjectTest } from './execProjectTest' +import { execGenericTest } from './execGenericTest' + +export default (options: TestRunnerOptions) => { + return describe(options.config.title, (test) => { + let project: Project | null = null + if (options.config.projectType) { + project = exerciseMap.get(options.config.projectType) + } + options.tasks.map((taskData) => { + taskData.tests.map((testData) => { + test(testData.name, () => { + if (project) { + return execProjectTest(project, testData, options) + } else { + return execGenericTest(testData, options) + } + }) + }) + }) + }) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/generateExpects.ts b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/generateExpects.ts new file mode 100644 index 0000000000..20407bbb71 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/generateAndRunTestSuite/generateExpects.ts @@ -0,0 +1,80 @@ +import { expect } from '../expect' +import type { Exercise } from '../../exercises/Exercise' + +export function generateExpects( + testsType: 'io' | 'state', + testData: TaskTest, + { exercise, actual }: { exercise?: Exercise; actual?: any } +) { + if (testsType == 'state') { + return generateExpectsForStateTests(exercise!, testData) + } else { + return generateExpectsForIoTests(testData, actual) + } +} + +// These are normal function in/out tests. We always know the actual value at this point +// (as it's returned from the function) so we can just compare it to the expected value. +function generateExpectsForIoTests(testData: TaskTest, actual: any) { + const matcher = testData.matcher || 'toEqual' + + return [ + // for now let's always include a label + expect({ + actual, + testsType: 'io', + name: testData.name, + slug: testData.slug, + })[matcher as AvailableMatchers](testData.expected), + ] +} + +// These are the state tests, where we're comparing mutiple different variables or functions +// on the resulting exercise. +function generateExpectsForStateTests(exercise: Exercise, testData: TaskTest) { + // We only need to do this once, so do it outside the loop. + const state = exercise.getState() + + return testData.checks!.map((expected) => { + const matcher = expected.matcher || 'toEqual' + + // Expected can either be a reference to the final state or a function call. + // We pivot on that to determine the actual value + let actual + + // If it's a function call, we split out any params and then call the function + // on the exercise with those params passed in. + if (expected.name.includes('(') && expected.name.endsWith(')')) { + const fnName = expected.name.slice(0, expected.name.indexOf('(')) + const argsString = expected.name.slice(expected.name.indexOf('(') + 1, -1) + + // We eval the args to turn numbers into numbers, strings into strings, etc. + const safe_eval = eval // https://esbuild.github.io/content-types/#direct-eval + const args = + argsString === '' + ? [] + : argsString.split(',').map((arg) => safe_eval(arg.trim())) + + // And then we get the function and call it. + const fn = exercise[fnName] + actual = fn.bind(exercise).call(exercise, ...args) + } + + // Our normal state is much easier! We just check the state object that + // we've retrieved above via getState() for the variable in question. + else { + actual = state[expected.name] + } + + const descriptionHtml = + expected.descriptionHtml?.replaceAll('%actual%', actual) || '' + + return expect({ + ...expected, + testsType: 'state', + actual, + descriptionHtml, + name: expected.label ?? expected.name, + })[matcher as AvailableMatchers](expected.value) + }) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/test-runner/index.ts b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/index.ts new file mode 100644 index 0000000000..98ec7104c0 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/test-runner/index.ts @@ -0,0 +1,33 @@ +export function describe( + suiteName: string, + callback: ( + test: (testName: string, testCallback: TestCallback) => void + ) => void +): TestSuiteResult { + // test results are collected in one shared array + const tests: NewTestResult[] = [] + + const test = createTestCallback(tests) + + // invokes the test callbacks, which mutate the tests array by pushing the new results to it + callback(test) + + return { + suiteName: suiteName, + tests, + status: tests.every((test) => test.status === 'pass') ? 'pass' : 'fail', + } +} + +function createTestCallback(tests: NewTestResult[]) { + return function (testName: string, testCallback: TestCallback): void { + const testCallbackResult = testCallback() + tests.push({ + // we need testIndex, so we can retrieve quickly the test that we are currently inspecting/working on + testIndex: tests.length, + name: testName, + status: testCallbackResult.expects.every((t) => t.pass) ? 'pass' : 'fail', + ...testCallbackResult, + }) + } +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/tests/DrawTests.ts b/app/javascript/components/bootcamp/SolveExercisePage/tests/DrawTests.ts new file mode 100644 index 0000000000..f92ff31707 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/tests/DrawTests.ts @@ -0,0 +1,75 @@ +import { AnimationTimeline } from '../AnimationTimeline/AnimationTimeline' +import DrawExercise from '../exercises/draw/DrawExercise' +import { interpret } from '@/interpreter/interpreter' +import { describe } from '../test-runner' +import { expect } from '../test-runner/expect' + +/* + DON'T DELETE THIS YET + */ +export default (options: TestRunnerOptions) => + describe('drawing tests', options, (test) => { + test('draws at least 5 rectangles', () => { + const drawE = new DrawExercise('draws-at-least-5-rectangles') + + /* store the generated view in this variable to prevent it from being permanently deleted + when switching between test results -- which clears out the view container */ + const view = document.getElementById('draws-at-least-5-rectangles') + const mountView = drawE.mount + const evaluated = interpret(options.studentCode, { + externalFunctions: drawE.availableFunctions, + state: { elementSerial: 0 }, + language: 'JikiScript', + }) + + const { frames, state } = evaluated + const actual = state.elementSerial + + const { animations } = drawE + const animationTimeline = new AnimationTimeline( + {}, + frames + ).populateTimeline(animations) + + const expected = 5 + return { + expectCb: expect(actual).toBeGreaterThanOrEqual(expected), + codeRun: '', + frames, + view, + animationTimeline: animationTimeline, + mountView, + } + }) + + test('draws no more than 8 rectangles', () => { + const drawE = new DrawExercise('draws-no-more-than-8-rectangles') + + const view = document.getElementById('draws-no-more-than-8-rectangles') + const mountView = drawE.mount + const evaluated = interpret(options.studentCode, { + externalFunctions: drawE.availableFunctions, + state: { elementSerial: 0 }, + language: 'JikiScript', + }) + + const { frames, state } = evaluated + const actual = state.elementSerial + + const { animations } = drawE + const animationTimeline = new AnimationTimeline( + {}, + frames + ).populateTimeline(animations) + + const expected = 8 + return { + expectCb: expect(actual).toBeLessThanOrEqual(expected), + codeRun: '', + frames, + view, + animationTimeline: animationTimeline, + mountView, + } + }) + }) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/utils/exerciseMap.ts b/app/javascript/components/bootcamp/SolveExercisePage/utils/exerciseMap.ts new file mode 100644 index 0000000000..2b0eca9941 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/utils/exerciseMap.ts @@ -0,0 +1,25 @@ +import DrawExercise from '../exercises/draw/DrawExercise' +import MazeExercise from '../exercises/maze/MazeExercise' +import WordleExercise from '../exercises/wordle/WordleExercise' + +import { Exercise } from '../exercises/Exercise' + +export type Project = new (...args: any[]) => Exercise +const projectsCache = new Map() + +projectsCache.set('draw', DrawExercise) +projectsCache.set('maze', MazeExercise) +projectsCache.set('wordle', WordleExercise) + +export default projectsCache + +export function getAndInitializeExerciseClass(config: Config): Exercise | null { + if (!config.projectType) return null + + const Project = projectsCache.get(config.projectType) + if (!Project) { + return null + } + const exercise: Exercise = new Project() + return exercise +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/utils/showError.ts b/app/javascript/components/bootcamp/SolveExercisePage/utils/showError.ts new file mode 100644 index 0000000000..74d82cfa8f --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/utils/showError.ts @@ -0,0 +1,39 @@ +import type { StaticError } from '@/interpreter/error' +import { describeError } from '../CodeMirror/extensions/end-line-information/describeError' +import type { InformationWidgetData } from '../CodeMirror/extensions/end-line-information/line-information' +import { ERROR_HIGHLIGHT_COLOR } from '../CodeMirror/extensions/lineHighlighter' + +// TODO: maybe move this into exercise store +export function showError({ + setUnderlineRange, + setHighlightedLine, + setHighlightedLineColor, + setInformationWidgetData, + setShouldShowInformationWidget, + error, +}: { + error: StaticError + setUnderlineRange: (range: { from: number; to: number }) => void + setHighlightedLine: (line: number) => void + setHighlightedLineColor: (color: string) => void + setInformationWidgetData: (data: InformationWidgetData) => void + setShouldShowInformationWidget: (shouldShow: boolean) => void +}) { + if (!error.location) { + console.error('Error location is missing') + return + } + setUnderlineRange({ + from: Math.max(0, error.location.absolute.begin - 1), + to: Math.max(0, error.location.absolute.end - 1), + }) + + setHighlightedLine(error.location.line) + setHighlightedLineColor(ERROR_HIGHLIGHT_COLOR) + setInformationWidgetData({ + html: describeError(error), + line: error.location.line, + status: 'ERROR', + }) + setShouldShowInformationWidget(true) +} diff --git a/app/javascript/components/bootcamp/common/ErrorBoundary/ErrorBoundary.tsx b/app/javascript/components/bootcamp/common/ErrorBoundary/ErrorBoundary.tsx new file mode 100644 index 0000000000..868f083320 --- /dev/null +++ b/app/javascript/components/bootcamp/common/ErrorBoundary/ErrorBoundary.tsx @@ -0,0 +1,68 @@ +import React from 'react' +import { Component, type ErrorInfo, type ReactNode } from 'react' + +class ErrorBoundary extends Component< + { children: ReactNode }, + { hasError: boolean; error: Error | null; errorInfo: ErrorInfo | null } +> { + state = { + hasError: false, + error: null as Error | null, + errorInfo: null as ErrorInfo | null, + } + + static getDerivedStateFromError() { + return { hasError: true } + } + + componentDidCatch(error: Error, errorInfo: ErrorInfo) { + console.error('Caught error:', error) + console.error('Error details:', errorInfo) + this.setState({ error, errorInfo }) + } + + handleReload = () => { + this.setState({ hasError: false, error: null, errorInfo: null }) + } + + render() { + if (this.state.hasError) { + // generic fallback UI + return ( +
+

Something went wrong.

+ {this.state.error && ( +

+ Error: {this.state.error.message} +

+ )} + {/* probably hide this in prod */} + {this.state.errorInfo && ( +
+ {this.state.errorInfo.componentStack} +
+ )} +
+ + +
+
+ ) + } + + // if no error -> render children + return this.props.children + } +} + +export default ErrorBoundary diff --git a/app/javascript/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary.tsx b/app/javascript/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary.tsx new file mode 100644 index 0000000000..8ee6f507fb --- /dev/null +++ b/app/javascript/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary.tsx @@ -0,0 +1,15 @@ +import React from 'react' +import ErrorBoundary from './ErrorBoundary' + +/** + * higher order component that wraps a component with an ErrorBoundary + */ +export function wrapWithErrorBoundary(Component: React.ComponentType) { + return function WrappedComponent(props: T & JSX.IntrinsicAttributes) { + return ( + + + + ) + } +} diff --git a/app/javascript/components/bootcamp/common/LottieAnimation.tsx b/app/javascript/components/bootcamp/common/LottieAnimation.tsx new file mode 100644 index 0000000000..58b7562499 --- /dev/null +++ b/app/javascript/components/bootcamp/common/LottieAnimation.tsx @@ -0,0 +1,30 @@ +import { useEffect, useRef } from 'react' +import lottie, { type AnimationItem } from 'lottie-web' + +type LottieAnimationProps = { + animationData: object + loop?: boolean +} & React.HTMLAttributes + +function LottieAnimation({ animationData, ...props }: LottieAnimationProps) { + const animationContainer = useRef(null) + const animationInstance = useRef(null) + + useEffect(() => { + if (animationContainer.current) { + animationInstance.current = lottie.loadAnimation({ + container: animationContainer.current, + renderer: 'svg', + loop: props.loop === undefined ? true : props.loop, + autoplay: true, + animationData: animationData, + }) + } + + return () => animationInstance.current?.destroy() + }, [animationData]) + + return
+} + +export default LottieAnimation diff --git a/app/javascript/components/bootcamp/common/hooks/useLogger.ts b/app/javascript/components/bootcamp/common/hooks/useLogger.ts new file mode 100644 index 0000000000..15d4db06a2 --- /dev/null +++ b/app/javascript/components/bootcamp/common/hooks/useLogger.ts @@ -0,0 +1,7 @@ +import { useEffect } from 'react' + +export function useLogger(label: string, value: any) { + useEffect(() => { + console.log(label, value) + }, [value]) +} diff --git a/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModal.tsx b/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModal.tsx new file mode 100644 index 0000000000..c417291f07 --- /dev/null +++ b/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModal.tsx @@ -0,0 +1,113 @@ +import Modal from 'react-modal' +import LottieAnimation from '@/components/bootcamp/common/LottieAnimation' +import animation from '@/../animations/finish-lesson-modal-top.json' +import { FinishLessonModalContext } from './FinishLessonModalContextWrapper' +import { useContext } from 'react' +import { SolveExercisePageContext } from '@/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper' +// import { playAudio } from "@/utils/play-audio"; +// @ts-ignore +// import celebrationSound from "/task-completed-sound.aac"; + +Modal.setAppElement('body') +export function FinishLessonModal() { + const { isOpen } = useContext(FinishLessonModalContext) + // useEffect(() => { + // if (!isOpen) { + // return; + // } + + // TODO: Sort this out + // playAudio(celebrationSound); + // }, [isOpen]); + + return ( + + + + ) +} + +function Inner() { + const { modalView } = useContext(FinishLessonModalContext) + + switch (modalView) { + case 'initial': + return + case 'completedExercise': + return + } +} + +function InitialView() { + const { handleCompleteSolution, setIsOpen } = useContext( + FinishLessonModalContext + ) + return ( + <> + +

Nice work!

+

+ You can now mark this exercise as complete, or go back and tweak your + code further if you'd like. +

+ +
+ + +
+ + ) +} + +function CompletedExerciseView() { + const { nextExerciseData } = useContext(FinishLessonModalContext) + const { links } = useContext(SolveExercisePageContext) + return ( +
+

Congratulations!

+ + {nextExerciseData ? ( + <> +

+ The next exercise is {nextExerciseData.title}. +

+

+ Do you want to start it, or would you rather go back to the projects + list? +

+ + ) : ( +

There are no exercises available at the moment.

+ )} + +
+ {nextExerciseData && ( + + Continue + + )} + + See project list + +
+
+ ) +} diff --git a/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModalContextWrapper.tsx b/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModalContextWrapper.tsx new file mode 100644 index 0000000000..5c33fe3bd0 --- /dev/null +++ b/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModalContextWrapper.tsx @@ -0,0 +1,29 @@ +import type { NextExercise } from '@/components/bootcamp/SolveExercisePage/Tasks/completeSolution' +import { createContext } from 'react' + +type FinishLessonModalContextValues = { + isOpen: boolean + setIsOpen: (value: boolean) => void + handleCompleteSolution: () => void + nextExerciseData: NextExercise | null + modalView: 'initial' | 'completedExercise' +} + +export const FinishLessonModalContext = + createContext( + {} as FinishLessonModalContextValues + ) + +export function FinishLessonModalContextWrapper({ + children, + value, +}: { + children: React.ReactNode + value: FinishLessonModalContextValues +}) { + return ( + + {children} + + ) +} diff --git a/app/javascript/components/bootcamp/types/AnimationTimeline.d.ts b/app/javascript/components/bootcamp/types/AnimationTimeline.d.ts new file mode 100644 index 0000000000..40af885609 --- /dev/null +++ b/app/javascript/components/bootcamp/types/AnimationTimeline.d.ts @@ -0,0 +1,6 @@ +declare global { + type TAnimationTimeline = + import('@/components/bootcamp/SolveExercisePage/AnimationTimeline/AnimationTimeline').AnimationTimeline +} + +export {} diff --git a/app/javascript/components/bootcamp/types/Matchers.d.ts b/app/javascript/components/bootcamp/types/Matchers.d.ts new file mode 100644 index 0000000000..618a620965 --- /dev/null +++ b/app/javascript/components/bootcamp/types/Matchers.d.ts @@ -0,0 +1,17 @@ +declare type AvailableMatchers = + | 'toBe' + | 'toExist' + | 'toEqual' + | 'toBeGreaterThanOrEqual' + | 'toBeLessThanOrEqual' + +interface MatcherResult { + testsType: TestsType + actual: any + name: string + slug: string + pass: boolean + descriptionHtml?: string + note?: string + expected?: any +} diff --git a/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts b/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts new file mode 100644 index 0000000000..1be5643844 --- /dev/null +++ b/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts @@ -0,0 +1,42 @@ +type Code = { + code: string + stored_at: Date | string | null + readonlyRanges: { from: number; to: number }[] +} + +type Solution = { + uuid: string + status: 'completed' | 'in_progress' +} + +interface Exercise { + part: number + introductionHtml: string + config: Config + tasks: Task[] + testResults: Pick, 'status'> & { + tests: (Pick & { actual: string })[] + } +} + +type Project = { slug: string } + +declare type SolveExercisePageProps = { + solution: Solution + project: Project + exercise: Exercise + code: Code + links: { + postSubmission: string + completeSolution: string + projectsIndex: string + } +} + +declare type Config = { + description: string + title: string + projectType: string + // tasks: Task[]; + testsType: 'io' | 'state' +} diff --git a/app/javascript/components/bootcamp/types/Tasks.d.ts b/app/javascript/components/bootcamp/types/Tasks.d.ts new file mode 100644 index 0000000000..b20e2567b7 --- /dev/null +++ b/app/javascript/components/bootcamp/types/Tasks.d.ts @@ -0,0 +1,34 @@ +declare type Task = { + name: string + instructionsHtml: string + status: 'active' | 'completed' | 'inactive' + projectType?: string + testsType: TestsType + tests: TaskTest[] +} + +type TestsType = 'io' | 'state' + +declare type TaskTest = { + name: string + slug: string + data: any + function: string + params: string[] + imageSlug?: string + matcher?: string + expected?: string + checks?: ExpectCheck[] + setupFunctions: SetupFunction[] +} + +declare type ExpectCheck = { + name: string + value: ?any + label?: string + note?: string + matcher?: AvailableMatchers + descriptionHtml?: string +} + +type SetupFunction = [functionName: keyof Exercise, params?: any[]] diff --git a/app/javascript/components/bootcamp/types/TestCallback.d.ts b/app/javascript/components/bootcamp/types/TestCallback.d.ts new file mode 100644 index 0000000000..5d0966d0aa --- /dev/null +++ b/app/javascript/components/bootcamp/types/TestCallback.d.ts @@ -0,0 +1,14 @@ +import { Frame } from '@/interpreter/frames' +declare global { + type TestCallback = () => { + slug: string + expects: MatcherResult[] + codeRun: string + frames: Frame[] + animationTimeline: TAnimationTimeline | null + view?: HTMLElement + imageSlug?: string + } +} + +export {} diff --git a/app/javascript/components/bootcamp/types/TestConfig.d.ts b/app/javascript/components/bootcamp/types/TestConfig.d.ts new file mode 100644 index 0000000000..c1925dd647 --- /dev/null +++ b/app/javascript/components/bootcamp/types/TestConfig.d.ts @@ -0,0 +1,5 @@ +declare type TestConfig = { + title: string + description: string + tasks: Task[] +} diff --git a/app/javascript/components/bootcamp/types/TestResult.d.ts b/app/javascript/components/bootcamp/types/TestResult.d.ts new file mode 100644 index 0000000000..6bd9cddedb --- /dev/null +++ b/app/javascript/components/bootcamp/types/TestResult.d.ts @@ -0,0 +1,29 @@ +/** + * Result after running `generateAndRunTestSuite` + */ +declare type TestSuiteResult = { + suiteName: string + tests: Result[] + status: 'pass' | 'fail' +} + +/** + * Result of the `test` callback + */ +declare type NewTestResult = { + name: string + slug: string + testIndex: number + status: 'pass' | 'fail' +} & ReturnType + +declare type PreviousTestResult = { + testIndex: number + name: string + slug: string + status: 'pass' | 'fail' + actual: string | null + expected: string | undefined | null + codeRun: string + testsType: TestsType +} diff --git a/app/javascript/components/bootcamp/types/TestRunner.d.ts b/app/javascript/components/bootcamp/types/TestRunner.d.ts new file mode 100644 index 0000000000..f55a02bc84 --- /dev/null +++ b/app/javascript/components/bootcamp/types/TestRunner.d.ts @@ -0,0 +1,5 @@ +declare type TestRunnerOptions = { + studentCode: string + tasks: Task[] + config: Exercise['config'] +} diff --git a/app/javascript/components/misc/CodeMirror/languageCompartment.ts b/app/javascript/components/misc/CodeMirror/languageCompartment.ts index f7d14ab06d..b3549cbf67 100644 --- a/app/javascript/components/misc/CodeMirror/languageCompartment.ts +++ b/app/javascript/components/misc/CodeMirror/languageCompartment.ts @@ -70,11 +70,11 @@ export const loadLanguageCompartment = async ( } // Legacy - case 'abap': { - const { abapMode } = await import('codemirror6-abap') - // @ts-ignore - return compartment.of(StreamLanguage.define(abapMode)) - } + // case 'abap': { + // const { abapMode } = await import('codemirror6-abap') + // // @ts-ignore + // return compartment.of(StreamLanguage.define(abapMode)) + // } case 'bash': { const { shell } = await import('@codemirror/legacy-modes/mode/shell') return compartment.of(StreamLanguage.define(shell)) @@ -277,7 +277,7 @@ export const loadLanguageCompartment = async ( return compartment.of(StreamLanguage.define(nim({}, {}))) } case 'julia': { - const { julia } = await import('lang-julia') + const { julia } = await import('@plutojl/lang-julia') return compartment.of(julia()) } default: diff --git a/app/javascript/esbuild.js b/app/javascript/esbuild.js index 02a784a53a..5338009a4b 100755 --- a/app/javascript/esbuild.js +++ b/app/javascript/esbuild.js @@ -13,6 +13,7 @@ function build() { './app/javascript/packs/internal.tsx', './app/javascript/packs/landing.tsx', './app/javascript/packs/bootcamp.tsx', + './app/javascript/packs/bootcamp-ui.tsx', ...(process.env.RAILS_ENV === 'test' ? ['./app/javascript/packs/test.tsx'] : []), diff --git a/app/javascript/interpreter/checks.ts b/app/javascript/interpreter/checks.ts new file mode 100644 index 0000000000..47d36a3340 --- /dev/null +++ b/app/javascript/interpreter/checks.ts @@ -0,0 +1,19 @@ +export function isNumber(obj: any): obj is number { + return typeof obj === 'number' || obj instanceof Number +} + +export function isBoolean(obj: any): obj is number { + return typeof obj === 'boolean' || obj instanceof Boolean +} + +export function isString(obj: any): obj is string { + return typeof obj === 'string' || obj instanceof String +} + +export function isArray(obj: any): obj is Array { + return obj instanceof Array +} + +export function isObject(obj: any): obj is Object { + return obj instanceof Object +} diff --git a/app/javascript/interpreter/environment.ts b/app/javascript/interpreter/environment.ts new file mode 100644 index 0000000000..76a42c27d5 --- /dev/null +++ b/app/javascript/interpreter/environment.ts @@ -0,0 +1,120 @@ +import { type Callable, isCallable } from './functions' +import { RuntimeError } from './error' +import type { Token } from './token' +import didYouMean from 'didyoumean' +import { translate } from './translator' +import { isString } from './checks' + +export class Environment { + private readonly values: Map = new Map() + + constructor(private readonly enclosing: Environment | null = null) {} + + public inScope(name: Token | string): boolean { + const nameString = isString(name) ? name : name.lexeme + + if (this.values.has(nameString)) { + return true + } + if (this.enclosing !== null) { + return this.enclosing.inScope(nameString) + } + return false + } + + public define(name: string, value: any): void { + this.values.set(name, value) + } + + public get(name: Token): any { + if (this.values.has(name.lexeme)) return this.values.get(name.lexeme) + if (this.enclosing !== null) return this.enclosing.get(name) + + const variableNames = Object.keys(this.variables()) + const functionNames = Object.keys(this.functions()) + + throw new RuntimeError( + translate('error.runtime.CouldNotFindValueWithName', { + name: name.lexeme, + }), + name.location, + 'CouldNotFindValueWithName', + { + didYouMean: { + variable: didYouMean(name.lexeme, variableNames), + function: didYouMean(name.lexeme, functionNames), + }, + } + ) + } + + public getAt(distance: number, name: string): any { + return this.ancestor(distance).values.get(name) + } + + private ancestor(distance: number) { + let environment: Environment = this + for (let i = 0; i < distance; i++) environment = environment.enclosing! + return environment + } + + public assign(name: Token, value: any): void { + if (this.values.has(name.lexeme)) { + this.values.set(name.lexeme, value) + return + } + + this.enclosing?.assign(name, value) + + throw new RuntimeError( + translate('error.runtime.couldNotFindValueWithName', { + name: name.lexeme, + }), + name.location, + 'CouldNotFindValueWithName' + ) + } + + public assignAt(distance: number, name: Token, value: any): void { + this.ancestor(distance).values.set(name.lexeme, value) + } + + public variables(): Record { + let current: Environment | null = this + let vars: any = {} + + while (current != null) { + for (const [key, value] of this.values) { + if (key in vars) continue + if (isCallable(value)) continue + + // The stringify/parse combination makes the value unique, + // which means that subsequent updates won't influence the + // value of previous frames + vars[key] = JSON.parse(JSON.stringify(value)) + } + + current = current.enclosing + } + + return vars + } + + public functions(): Record { + let current: Environment | null = this + let functions: any = {} + + while (current != null) { + for (const [key, value] of this.values) { + if (key in functions) continue + if (!isCallable(value)) continue + + functions[key] = value + } + + current = current.enclosing + } + + return functions + } +} diff --git a/app/javascript/interpreter/error.ts b/app/javascript/interpreter/error.ts new file mode 100644 index 0000000000..d6542c03e8 --- /dev/null +++ b/app/javascript/interpreter/error.ts @@ -0,0 +1,100 @@ +import { Location } from './location' + +export type DisabledLanguageFeatureErrorType = + | 'ExcludeListViolation' + | 'IncludeListViolation' + +export type SemanticErrorType = + | 'TopLevelReturn' + | 'VariableUsedInOwnInitializer' + | 'DuplicateVariableName' + | 'CannotAssignToConstant' + | 'InvalidPostfixOperand' + +export type RuntimeErrorType = + | 'CouldNotFindValueWithName' + | 'CouldNotEvaluateFunction' + | 'CouldNotFindFunctionWithName' + | 'CouldNotFindFunctionWithNameSuggestion' + | 'MissingParenthesesForFunctionCall' + | 'InvalidExpression' + | 'RepeatCountMustBeNumber' + | 'RepeatCountMustBeGreaterThanZero' + | 'NonCallableTarget' + | 'InfiniteLoop' + | 'InvalidNumberOfArguments' + | 'InvalidNumberOfArgumentsWithOptionalArguments' + | 'InvalidUnaryOperator' + | 'InvalidBinaryExpression' + | 'LogicError' + | 'OperandMustBeBoolean' + | 'OperandsMustBeBooleans' + | 'OperandMustBeNumber' + | 'OperandsMustBeNumbers' + | 'OperandsMustBeTwoNumbersOrTwoStrings' + | 'InvalidIndexGetterTarget' + | 'InvalidIndexSetterTarget' + +export type StaticErrorType = + | DisabledLanguageFeatureErrorType + | SemanticErrorType + | SyntaxErrorType + +export type ErrorType = StaticErrorType | RuntimeErrorType + +export type ErrorCategory = + | 'SyntaxError' + | 'SemanticError' + | 'DisabledLanguageFeatureError' + | 'RuntimeError' + +export abstract class FrontendError extends Error { + constructor( + public message: string, + public location: Location | null, + public type: T, + public context?: any + ) { + super(message) + } + + public get category() { + return this.constructor.name + } +} + +export type StaticError = SyntaxError | SemanticError | RuntimeError + +export class SyntaxError extends FrontendError {} + +export class SemanticError extends FrontendError {} + +export class DisabledLanguageFeatureError extends FrontendError {} + +export class RuntimeError extends FrontendError {} + +export function isStaticError(obj: any): obj is StaticError { + return ( + isSyntaxError(obj) || + isSemanticError(obj) || + isDisabledLanguageFeatureError(obj) + ) +} + +export function isSyntaxError(obj: any): obj is SyntaxError { + return obj instanceof SyntaxError +} + +export function isSemanticError(obj: any): obj is SemanticError { + return obj instanceof SemanticError +} + +export function isDisabledLanguageFeatureError( + obj: any +): obj is DisabledLanguageFeatureError { + return obj instanceof DisabledLanguageFeatureError +} + +export function isRuntimeError(obj: any): obj is RuntimeError { + return obj instanceof RuntimeError +} diff --git a/app/javascript/interpreter/evaluation-result.ts b/app/javascript/interpreter/evaluation-result.ts new file mode 100644 index 0000000000..ac2046b508 --- /dev/null +++ b/app/javascript/interpreter/evaluation-result.ts @@ -0,0 +1,196 @@ +import type { TokenType } from './token' + +export type EvaluationResultVariableStatement = { + type: 'VariableStatement' + value: any + name: string + data?: Record +} + +export type EvaluationResultTernaryExpression = { + type: 'TernaryExpression' + value: any + condition: EvaluationResult + data?: Record +} + +export type EvaluationResultUpdateExpression = { + type: 'UpdateExpression' + operand: any + operator: any + value: any + newValue: any + data?: Record +} + +export type EvaluationResultIfStatement = { + type: 'IfStatement' + value: any + condition: EvaluationResult + data?: Record +} + +export type EvaluationResultReturnStatement = { + type: 'ReturnStatement' + value: any + data?: Record +} + +export type EvaluationResultForeachStatement = { + type: 'ForeachStatement' + value?: any + elementName: string + iterable: EvaluationResult + data?: Record +} + +export type EvaluationResultExpressionStatement = { + type: 'ExpressionStatement' + value: any + expression: EvaluationResult + data?: Record +} + +export type EvaluationResultLogicalExpression = { + type: 'LogicalExpression' + value: any + left: EvaluationResult + right?: EvaluationResult + operator: TokenType + shortCircuited: boolean + data?: Record +} + +export type EvaluationResultBinaryExpression = { + type: 'BinaryExpression' + value: any + left: EvaluationResult + right: EvaluationResult + operator: TokenType + data?: Record +} + +export type EvaluationResultUnaryExpression = { + type: 'UnaryExpression' + value: any + right: EvaluationResult + operator: TokenType + data?: Record +} + +export type EvaluationResultGroupingExpression = { + type: 'GroupingExpression' + value: any + inner: EvaluationResult + data?: Record +} + +export type EvaluationResultLiteralExpression = { + type: 'LiteralExpression' + value: any + data?: Record +} + +export type EvaluationResultVariableExpression = { + type: 'VariableExpression' + value: any + name: string + data?: Record +} + +export type EvaluationResultConstantStatement = { + type: 'ConstantStatement' + value: any + name: string + data?: Record +} + +export type EvaluationResultAssignExpression = { + type: 'AssignExpression' + name: string + operator: TokenType + value: any + newValue: any + data?: Record +} + +export type EvaluationResultGetExpression = { + type: 'GetExpression' + value: any + obj: any + field: any + expression: string + data?: Record +} + +export type EvaluationResultSetExpression = { + type: 'SetExpression' + value: any + obj: any + field: any + expression: string + data?: Record +} + +export type EvaluationResultArrayExpression = { + type: 'ArrayExpression' + value: any + data?: Record +} + +export type EvaluationResultDictionaryExpression = { + type: 'DictionaryExpression' + value: any + data?: Record +} + +export type EvaluationResultTemplateTextExpression = { + type: 'TemplateTextExpression' + value: any + data?: Record +} + +export type EvaluationResultTemplatePlaceholderExpression = { + type: 'TemplatePlaceholderExpression' + value: any + data?: Record +} + +export type EvaluationResultTemplateLiteralExpression = { + type: 'TemplateLiteralExpression' + value: any + data?: Record +} + +export type EvaluationResultCallExpression = { + type: 'CallExpression' + value: any + callee: EvaluationResult + args: EvaluationResult[] + data?: Record +} + +export type EvaluationResult = + | EvaluationResultVariableStatement + | EvaluationResultUpdateExpression + | EvaluationResultConstantStatement + | EvaluationResultTernaryExpression + | EvaluationResultIfStatement + | EvaluationResultExpressionStatement + | EvaluationResultForeachStatement + | EvaluationResultReturnStatement + | EvaluationResultLiteralExpression + | EvaluationResultArrayExpression + | EvaluationResultDictionaryExpression + | EvaluationResultVariableExpression + | EvaluationResultCallExpression + | EvaluationResultLogicalExpression + | EvaluationResultBinaryExpression + | EvaluationResultUnaryExpression + | EvaluationResultGroupingExpression + | EvaluationResultAssignExpression + | EvaluationResultGetExpression + | EvaluationResultSetExpression + | EvaluationResultTemplateTextExpression + | EvaluationResultTemplatePlaceholderExpression + | EvaluationResultTemplateLiteralExpression diff --git a/app/javascript/interpreter/executor.ts b/app/javascript/interpreter/executor.ts new file mode 100644 index 0000000000..c482c6d3bd --- /dev/null +++ b/app/javascript/interpreter/executor.ts @@ -0,0 +1,943 @@ +import { + type Callable, + ReturnValue, + UserDefinedFunction, + isCallable, +} from './functions' +import { isArray, isBoolean, isNumber, isObject, isString } from './checks' +import { Environment } from './environment' +import { RuntimeError, type RuntimeErrorType, isRuntimeError } from './error' +import { + ArrayExpression, + AssignExpression, + BinaryExpression, + CallExpression, + DictionaryExpression, + Expression, + type ExpressionVisitor, + GetExpression, + GroupingExpression, + LiteralExpression, + LogicalExpression, + SetExpression, + TemplateLiteralExpression, + TemplatePlaceholderExpression, + TemplateTextExpression, + TernaryExpression, + UnaryExpression, + UpdateExpression, + VariableExpression, +} from './expression' +import { Location, Span } from './location' +import { + BlockStatement, + ConstantStatement as ConstantStatement, + DoWhileStatement, + ExpressionStatement, + ForeachStatement, + FunctionStatement, + IfStatement, + RepeatStatement, + RepeatUntilGameOverStatement, + ReturnStatement, + Statement, + type StatementVisitor, + VariableStatement, + WhileStatement, +} from './statement' +import type { Token } from './token' +import type { EvaluationResult } from './evaluation-result' +import { translate } from './translator' +import cloneDeep from 'lodash.clonedeep' +import type { LanguageFeatures } from './interpreter' +import type { InterpretResult } from './interpreter' + +import type { Frame, FrameExecutionStatus } from './frames' +import { describeFrame } from './frames' + +export type ExecutionContext = { + state: Record + getCurrentTime: Function + fastForward: Function + evaluate: Function + updateState: Function + logicError: Function +} + +export type ExternalFunction = { + name: string + func: Function + description: string +} + +class LogicError extends Error {} + +export class Executor + implements ExpressionVisitor, StatementVisitor +{ + private frames: Frame[] = [] + private frameTime: number = 0 + private location: Location | null = null + private time: number = 0 + + private readonly globals = new Environment() + private environment = this.globals + + constructor( + private readonly sourceCode: string, + private languageFeatures: LanguageFeatures = {}, + private externalFunctions: ExternalFunction[], + private locals: Map, + private externalState: Record = {} + ) { + for (let externalFunction of externalFunctions) { + externalFunction = cloneDeep(externalFunction) + const func = externalFunction.func + + // The first value passed to the function is the interpreter + // so we discount that when working out the user's arity. + // TODO: We need to consider default params here + const arity = () => [func.length - 1, func.length - 1] + const call = (context: ExecutionContext, args: any[]) => + func(context, ...args) + + const callable = { + arity: arity, + call: call, + } + + this.globals.define(externalFunction.name, callable) + this.environment.define(externalFunction.name, callable) + } + } + + public updateState(name: string, value: any) { + this.externalState[name] = value + } + + public logicError(message: string) { + throw new LogicError(message) + } + + public execute(statements: Statement[]): InterpretResult { + for (const statement of statements) { + try { + this.executeStatement(statement) + } catch (error) { + if (isRuntimeError(error)) { + this.addFrame( + this.location || error.location, + 'ERROR', + undefined, + error + ) + break + } + + throw error + } + } + + return { frames: this.frames, error: null } + } + + public evaluateSingleExpression(statement: Statement) { + try { + if (!(statement instanceof ExpressionStatement)) { + this.error('InvalidExpression', Location.unknown, { + statement: statement, + }) + } + + const result = this.evaluate(statement.expression) + return { value: result.value, frames: this.frames, error: null } + } catch (error) { + if (isRuntimeError(error)) { + this.addFrame( + this.location || error.location, + 'ERROR', + undefined, + error + ) + return { value: undefined, frames: this.frames, error: null } + } + + throw error + } + } + + public executeBlock(statements: Statement[], environment: Environment): void { + const previous: Environment = this.environment + try { + this.environment = environment + + for (const statement of statements) { + this.executeStatement(statement) + } + } finally { + this.environment = previous + } + } + + private executeFrame( + context: Statement | Expression, + code: () => EvaluationResult + ): T { + this.location = context.location + const result = code() + this.addFrame(context.location, 'SUCCESS', result) + this.location = null + return result.value + } + + public visitExpressionStatement(statement: ExpressionStatement): void { + this.executeFrame(statement, () => { + const result = this.evaluate(statement.expression) + + if (statement.expression instanceof VariableExpression) + this.error('MissingParenthesesForFunctionCall', statement.location, { + expression: statement.expression, + }) + + return result + }) + } + + public visitVariableStatement(statement: VariableStatement): void { + this.executeFrame(statement, () => { + const result = this.evaluate(statement.initializer) + const updating = this.environment.inScope(statement.name.lexeme) + this.environment.define(statement.name.lexeme, result.value) + return { + type: 'VariableStatement', + name: statement.name.lexeme, + value: result.value, + data: { + updating: updating, + }, + } + }) + } + + public visitConstantStatement(statement: ConstantStatement): void { + this.executeFrame(statement, () => { + const result = this.evaluate(statement.initializer) + this.environment.define(statement.name.lexeme, result.value) + return { + type: 'ConstantStatement', + name: statement.name.lexeme, + value: result.value, + } + }) + } + + public visitIfStatement(statement: IfStatement): void { + const conditionResult = this.executeFrame(statement, () => { + const result = this.evaluate(statement.condition) + return { + type: 'IfStatement', + value: result.value, + condition: result, + } + }) + + if (conditionResult) { + this.executeStatement(statement.thenBranch) + return + } + + if (statement.elseBranch === null) return + this.executeStatement(statement.elseBranch!) + } + + public visitRepeatStatement(statement: RepeatStatement): void { + let count = this.executeFrame(statement, () => + this.evaluate(statement.count) + ) + if (!isNumber(count)) + this.error('RepeatCountMustBeNumber', statement.count.location, { + count, + }) + + if (count < 1) + this.error('RepeatCountMustBeGreaterThanZero', statement.count.location, { + count, + }) + + while (count > 0) { + this.executeBlock(statement.body, this.environment) + count-- + } + } + + public visitRepeatUntilGameOverStatement( + statement: RepeatUntilGameOverStatement + ): void { + var count = 0 // Count is a guard against infinite looping + + while (!this.externalState.gameOver) { + if (count >= 100) { + const errorLoc = new Location( + statement.location.line, + statement.location.relative, + new Span( + statement.location.absolute.begin, + statement.location.absolute.begin + 22 + ) + ) + this.error('InfiniteLoop', errorLoc) + } + + this.executeBlock(statement.body, this.environment) + count++ + } + } + + public visitWhileStatement(statement: WhileStatement): void { + while ( + this.executeFrame(statement, () => this.evaluate(statement.condition)) + ) + this.executeBlock(statement.body, this.environment) + } + + public visitDoWhileStatement(statement: DoWhileStatement): void { + do { + this.executeBlock(statement.body, this.environment) + } while ( + this.executeFrame(statement, () => + this.evaluate(statement.condition) + ) + ) + } + + public visitBlockStatement(statement: BlockStatement): void { + this.executeBlock(statement.statements, new Environment(this.environment)) + } + + public visitFunctionStatement(statement: FunctionStatement): void { + const func = new UserDefinedFunction(statement, this.environment) + this.environment.define(statement.name.lexeme, func) + } + + public visitReturnStatement(statement: ReturnStatement): void { + const evaluationResult = this.executeFrame( + statement, + () => { + return { + type: 'ReturnStatement', + value: + statement.value === null + ? undefined + : this.evaluate(statement.value), + } + } + ) + throw new ReturnValue(evaluationResult.value) + } + + visitForeachStatement(statement: ForeachStatement): void { + const iterable = this.evaluate(statement.iterable) + if (!isArray(iterable.value) || iterable.value?.length === 0) { + this.executeFrame(statement, () => { + return { + type: 'ForeachStatement', + value: undefined, + iterable, + elementName: statement.elementName.lexeme, + } + }) + } + + for (const value of iterable.value) { + this.executeFrame(statement, () => { + return { + type: 'ForeachStatement', + value, + iterable, + elementName: statement.elementName.lexeme, + } + }) + + const loopEnvironment = new Environment(this.environment) + loopEnvironment.define(statement.elementName.lexeme, value) + this.executeBlock(statement.body, loopEnvironment) + } + } + + visitTernaryExpression(expression: TernaryExpression): EvaluationResult { + const condition = this.evaluate(expression.condition) + this.verifyBooleanOperand(condition.value, expression.condition.location) + + const result = condition.value + ? this.evaluate(expression.thenBranch) + : this.evaluate(expression.elseBranch) + + return { + type: 'TernaryExpression', + value: result.value, + condition: condition, + } + } + + visitTemplateLiteralExpression( + expression: TemplateLiteralExpression + ): EvaluationResult { + return { + type: 'TemplateLiteralExpression', + value: expression.parts + .map((part) => this.evaluate(part).value.toString()) + .join(''), + } + } + + visitTemplatePlaceholderExpression( + expression: TemplatePlaceholderExpression + ): EvaluationResult { + return { + type: 'TemplatePlaceholderExpression', + value: this.evaluate(expression.inner).value, + } + } + + visitTemplateTextExpression( + expression: TemplateTextExpression + ): EvaluationResult { + return { + type: 'TemplateTextExpression', + value: expression.text.literal, + } + } + + visitArrayExpression(expression: ArrayExpression): EvaluationResult { + return { + type: 'ArrayExpression', + value: expression.elements.map((element) => this.evaluate(element).value), + } + } + + visitDictionaryExpression( + expression: DictionaryExpression + ): EvaluationResult { + let dict: Record = {} + + for (const [key, value] of expression.elements) + dict[key] = this.evaluate(value).value + + return { type: 'DictionaryExpression', value: dict } + } + + public visitCallExpression(expression: CallExpression): EvaluationResult { + let callee: any + + try { + callee = this.evaluate(expression.callee) + } catch (e) { + if (isRuntimeError(e) && e.type == 'CouldNotFindValueWithName') { + if ( + expression.callee instanceof VariableExpression && + e.context?.didYouMean?.function?.length > 0 + ) { + const alternative = e.context.didYouMean.function + this.error('CouldNotFindFunctionWithNameSuggestion', e.location, { + ...e.context, + suggestion: alternative, + name: expression.callee.name.lexeme, + }) + } + + this.error('CouldNotFindFunctionWithName', e.location, e.context) + } + + throw e + } + + if (!isCallable(callee.value)) + this.error('NonCallableTarget', expression.location, { callee }) + + const args: EvaluationResult[] = [] + for (const arg of expression.args) args.push(this.evaluate(arg)) + + const arity = callee.value.arity() + const [minArity, maxArity] = isNumber(arity) ? [arity, arity] : arity + + if (args.length < minArity || args.length > maxArity) { + if (minArity === maxArity) { + this.error('InvalidNumberOfArguments', expression.paren.location, { + arity: maxArity, + args, + }) + } else + this.error( + 'InvalidNumberOfArgumentsWithOptionalArguments', + expression.paren.location, + { + minArity, + maxArity, + numberOfArgs: args.length, + } + ) + } + + let value + + try { + value = callee.value.call( + { + state: this.externalState, + fastForward: (n: number) => { + this.time += n + }, + getCurrentTime: () => this.time, + executeBlock: this.executeBlock.bind(this), + evaluate: this.evaluate.bind(this), + updateState: this.updateState.bind(this), + logicError: this.logicError.bind(this), + }, + args.map((arg) => arg.value) + ) + } catch (e) { + if (e instanceof LogicError) { + this.error('LogicError', expression.location, { message: e.message }) + } else { + throw e + } + } + + return { + type: 'CallExpression', + callee, + args, + value, + } + } + + public visitLiteralExpression( + expression: LiteralExpression + ): EvaluationResult { + return { + type: 'LiteralExpression', + value: expression.value, + } + } + + public visitVariableExpression( + expression: VariableExpression + ): EvaluationResult { + const value = this.lookupVariable(expression.name, expression) + return { + type: 'VariableExpression', + name: expression.name.lexeme, + value, + } + } + + public visitUnaryExpression(expression: UnaryExpression): EvaluationResult { + const operand = this.evaluate(expression.operand) + + switch (expression.operator.type) { + case 'NOT': + this.verifyBooleanOperand(expression.operator, operand.value) + return { + type: 'UnaryExpression', + operator: expression.operator.type, + value: !operand.value, + right: operand, + } + case 'MINUS': + this.verifyNumberOperand(expression.operator, operand.value) + return { + type: 'UnaryExpression', + operator: expression.operator.type, + value: -operand.value, + right: operand, + } + } + + // Unreachable. + this.error('InvalidUnaryOperator', expression.operator.location, { + expression, + }) + } + + public visitBinaryExpression(expression: BinaryExpression): EvaluationResult { + const left = this.evaluate(expression.left) + const right = this.evaluate(expression.right) + + const result: EvaluationResult = { + type: 'BinaryExpression', + value: undefined, + operator: expression.operator.type, + left, + right, + } + + switch (expression.operator.type) { + case 'STRICT_INEQUALITY': + // TODO: throw error when types are not the same? + return { ...result, value: left.value !== right.value } + case 'INEQUALITY': + // TODO: throw error when types are not the same? + return { ...result, value: left.value != right.value } + case 'STRICT_EQUALITY': + // TODO: throw error when types are not the same? + return { + ...result, + value: left.value === right.value, + } + case 'EQUALITY': + // TODO: throw error when types are not the same? + return { + ...result, + value: left.value == right.value, + } + case 'GREATER': + this.verifyNumberOperands(expression.operator, left.value, right.value) + return { + ...result, + value: left.value > right.value, + } + case 'GREATER_EQUAL': + this.verifyNumberOperands(expression.operator, left.value, right.value) + return { + ...result, + value: left.value >= right.value, + } + case 'LESS': + this.verifyNumberOperands(expression.operator, left.value, right.value) + return { + ...result, + value: left.value < right.value, + } + case 'LESS_EQUAL': + this.verifyNumberOperands(expression.operator, left.value, right.value) + return { + ...result, + value: left.value <= right.value, + } + case 'MINUS': + this.verifyNumberOperands(expression.operator, left.value, right.value) + return { + ...result, + value: left.value - right.value, + } + //> binary-plus + case 'PLUS': + if (isNumber(left.value) && isNumber(right.value)) + return { + ...result, + value: left.value + right.value, + } + if (isString(left.value) && isString(right.value)) + return { + ...result, + value: left.value + right.value, + } + + this.error( + 'OperandsMustBeTwoNumbersOrTwoStrings', + expression.operator.location, + { + left, + right, + } + ) + + case 'SLASH': + this.verifyNumberOperands(expression.operator, left.value, right.value) + return { + ...result, + value: left.value / right.value, + } + case 'STAR': + this.verifyNumberOperands(expression.operator, left.value, right.value) + return { + ...result, + value: left.value * right.value, + } + case 'PERCENT': + this.verifyNumberOperands(expression.operator, left.value, right.value) + return { + ...result, + value: left.value % right.value, + } + } + + this.error('InvalidBinaryExpression', expression.location, { expression }) + } + + public visitLogicalExpression( + expression: LogicalExpression + ): EvaluationResult { + if (expression.operator.type === 'OR') { + const leftOr = this.evaluate(expression.left) + this.verifyBooleanOperand(expression.operator, leftOr.value) + + let rightOr: EvaluationResult | undefined = undefined + + if (!leftOr.value) { + rightOr = this.evaluate(expression.right) + this.verifyBooleanOperand(expression.operator, rightOr.value) + } + + return { + value: leftOr.value || rightOr?.value, + type: 'LogicalExpression', + left: leftOr, + right: rightOr, + operator: expression.operator.type, + shortCircuited: rightOr === undefined, + } + } + + const leftAnd = this.evaluate(expression.left) + this.verifyBooleanOperand(expression.operator, leftAnd.value) + + let rightAnd: EvaluationResult | undefined = undefined + + if (leftAnd.value) { + rightAnd = this.evaluate(expression.right) + this.verifyBooleanOperand(expression.operator, rightAnd.value) + } + + return { + value: leftAnd.value && rightAnd?.value, + type: 'LogicalExpression', + left: leftAnd, + right: rightAnd, + operator: expression.operator.type, + shortCircuited: rightAnd === undefined, + } + } + + public visitGroupingExpression( + expression: GroupingExpression + ): EvaluationResult { + const inner = this.evaluate(expression.inner) + + return { + type: 'GroupingExpression', + value: inner.value, + inner, + } + } + + public visitAssignExpression(expression: AssignExpression): EvaluationResult { + const value = this.evaluate(expression.value) + const newValue = + expression.operator.type === 'EQUAL' + ? value.value + : expression.operator.type === 'PLUS_EQUAL' + ? this.lookupVariable(expression.name, expression) + value.value + : expression.operator.type === 'MINUS_EQUAL' + ? this.lookupVariable(expression.name, expression) - value.value + : expression.operator.type === 'STAR_EQUAL' + ? this.lookupVariable(expression.name, expression) * value.value + : expression.operator.type === 'SLASH_EQUAL' + ? this.lookupVariable(expression.name, expression) / value.value + : null + + this.updateVariable(expression, expression.name, newValue) + + return { + type: 'AssignExpression', + name: expression.name.lexeme, + operator: expression.operator.type, + value, + newValue, + } + } + + public visitUpdateExpression(expression: UpdateExpression): EvaluationResult { + let value + let newValue + + if (expression.operand instanceof VariableExpression) { + value = this.lookupVariable(expression.operand.name, expression.operand) + this.verifyNumberOperand(expression.operator, value) + + newValue = + expression.operator.type === 'PLUS_PLUS' ? value + 1 : value - 1 + + this.updateVariable(expression.operand, expression.operand.name, newValue) + + return { + type: 'UpdateExpression', + operand: expression.operand, + operator: expression.operator.type, + value, + newValue, + } + } else if (expression.operand instanceof GetExpression) { + const obj = this.evaluate(expression.operand.obj) + + if (isObject(obj.value) && expression.operand.field.type === 'STRING') { + value = obj.value[expression.operand.field.literal] + } else if ( + isArray(obj.value) && + expression.operand.field.type === 'NUMBER' + ) { + value = obj.value[expression.operand.field.literal] + } + + this.verifyNumberOperand(expression.operator, value) + newValue = + expression.operator.type === 'PLUS_PLUS' ? value + 1 : value - 1 + obj.value[expression.operand.field.literal] = newValue + + return { + type: 'UpdateExpression', + operand: expression.operand, + operator: expression.operator.type, + value, + newValue, + } + } + + throw new Error('InvalidUpdateExpression') + } + + private updateVariable( + expression: Expression, + name: Token, + newValue: undefined + ) { + const distance = this.locals.get(expression) + if (distance === undefined) this.globals.assign(name, newValue) + else this.environment.assignAt(distance, name, newValue) + } + + public visitGetExpression(expression: GetExpression): EvaluationResult { + const obj = this.evaluate(expression.obj) + + if (isObject(obj.value) && expression.field.type === 'STRING') { + // TODO: consider if we want to throw an error when the field does not exist or return null + return { + type: 'GetExpression', + obj: obj, + expression: `${expression.obj.location.toCode(this.sourceCode)}[${ + expression.field.lexeme + }]`, + field: expression.field.literal, + value: obj.value[expression.field.literal], + } + } + + if (isArray(obj.value) && expression.field.type === 'NUMBER') { + // TODO: consider if we want to throw an error when the index does not exist or return null + return { + type: 'GetExpression', + obj: obj, + expression: `${expression.obj.location.toCode(this.sourceCode)}[${ + expression.field.lexeme + }]`, + field: expression.field.literal, + value: obj.value[expression.field.literal], + } + } + + this.error('InvalidIndexGetterTarget', expression.location, { + expression, + obj, + }) + } + + public visitSetExpression(expression: SetExpression): EvaluationResult { + const obj = this.evaluate(expression.obj) + + if ( + (isObject(obj.value) && expression.field.type === 'STRING') || + (isArray(obj.value) && expression.field.type === 'NUMBER') + ) { + const value = this.evaluate(expression.value) + obj.value[expression.field.literal] = value.value + + return { + type: 'SetExpression', + obj, + value, + field: expression.field.literal, + expression: `${expression.obj.location.toCode(this.sourceCode)}[${ + expression.field.lexeme + }]`, + } + } + + this.error('InvalidIndexSetterTarget', expression.location, { + expression, + obj, + }) + } + + private verifyNumberOperand(operator: Token, operand: any): void { + if (isNumber(operand)) return + + this.error('OperandMustBeNumber', operator.location, { operand }) + } + + private verifyNumberOperands(operator: Token, left: any, right: any): void { + if (isNumber(left) && isNumber(right)) return + + this.error('OperandsMustBeNumbers', operator.location, { left, right }) + } + + private verifyBooleanOperand(operand: any, location: Location): void { + if (isBoolean(operand)) return + + if (this.languageFeatures?.truthiness === 'OFF') + this.error('OperandMustBeBoolean', location, { operand }) + } + + public executeStatement(statement: Statement): void { + statement.accept(this) + } + + public evaluate(expression: Expression): EvaluationResult { + return expression.accept(this) + } + + private lookupVariable(name: Token, expression: VariableExpression): any { + const distance = this.locals.get(expression) + if (distance === undefined) return this.globals.get(name) + return this.environment.getAt(distance, name.lexeme) + } + + private addFrame( + location: Location | null, + status: FrameExecutionStatus, + result?: EvaluationResult, + error?: RuntimeError + ): void { + if (location === null) location = Location.unknown + + const frame: Frame = { + code: location.toCode(this.sourceCode), + line: location.line, + status, + result, + error, + variables: this.environment.variables(), + functions: this.environment.functions(), + time: this.frameTime, + description: '', + } + frame.description = describeFrame(frame, this.externalFunctions) + + this.frames.push(frame) + + this.time++ + this.frameTime = this.time + } + + private error( + type: RuntimeErrorType, + location: Location | null, + context: any = {} + ): never { + throw new RuntimeError( + translate(`error.runtime.${type}`, context), + location, + type, + context + ) + } +} diff --git a/app/javascript/interpreter/expression.ts b/app/javascript/interpreter/expression.ts new file mode 100644 index 0000000000..ac0ec930c6 --- /dev/null +++ b/app/javascript/interpreter/expression.ts @@ -0,0 +1,244 @@ +import type { Token } from './token' +import { Location } from './location' + +export interface ExpressionVisitor { + visitCallExpression(expression: CallExpression): T + visitLiteralExpression(expression: LiteralExpression): T + visitVariableExpression(expression: VariableExpression): T + visitUnaryExpression(expression: UnaryExpression): T + visitBinaryExpression(expression: BinaryExpression): T + visitLogicalExpression(expression: LogicalExpression): T + visitGroupingExpression(expression: GroupingExpression): T + visitTemplateLiteralExpression(expression: TemplateLiteralExpression): T + visitTemplatePlaceholderExpression( + expression: TemplatePlaceholderExpression + ): T + visitTemplateTextExpression(expression: TemplateTextExpression): T + visitAssignExpression(expression: AssignExpression): T + visitUpdateExpression(expression: UpdateExpression): T + visitArrayExpression(expression: ArrayExpression): T + visitDictionaryExpression(expression: DictionaryExpression): T + visitGetExpression(expression: GetExpression): T + visitSetExpression(expression: SetExpression): T + visitTernaryExpression(expression: TernaryExpression): T +} + +export abstract class Expression { + abstract accept(visitor: ExpressionVisitor): T + abstract location: Location +} + +export class CallExpression extends Expression { + constructor( + public callee: Expression, + public paren: Token, + public args: Expression[], + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitCallExpression(this) + } +} + +export class TernaryExpression extends Expression { + constructor( + public condition: Expression, + public thenBranch: Expression, + public elseBranch: Expression, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitTernaryExpression(this) + } +} + +export class LiteralExpression extends Expression { + constructor(public value: any, public location: Location) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitLiteralExpression(this) + } +} + +export class ArrayExpression extends Expression { + constructor(public elements: Expression[], public location: Location) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitArrayExpression(this) + } +} + +export class DictionaryExpression extends Expression { + constructor( + public elements: Map, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitDictionaryExpression(this) + } +} + +export class VariableExpression extends Expression { + constructor(public name: Token, public location: Location) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitVariableExpression(this) + } +} + +export class BinaryExpression extends Expression { + constructor( + public left: Expression, + public operator: Token, + public right: Expression, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitBinaryExpression(this) + } +} + +export class LogicalExpression extends Expression { + constructor( + public left: Expression, + public operator: Token, + public right: Expression, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitLogicalExpression(this) + } +} + +export class UnaryExpression extends Expression { + constructor( + public operator: Token, + public operand: Expression, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitUnaryExpression(this) + } +} + +export class GroupingExpression extends Expression { + constructor(public inner: Expression, public location: Location) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitGroupingExpression(this) + } +} + +export class TemplatePlaceholderExpression extends Expression { + constructor(public inner: Expression, public location: Location) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitTemplatePlaceholderExpression(this) + } +} + +export class TemplateTextExpression extends Expression { + constructor(public text: Token, public location: Location) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitTemplateTextExpression(this) + } +} + +export class TemplateLiteralExpression extends Expression { + constructor(public parts: Expression[], public location: Location) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitTemplateLiteralExpression(this) + } +} + +export class AssignExpression extends Expression { + constructor( + public name: Token, + public operator: Token, + public value: Expression, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitAssignExpression(this) + } +} + +export class UpdateExpression extends Expression { + constructor( + public operand: Expression, + public operator: Token, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitUpdateExpression(this) + } +} + +export class GetExpression extends Expression { + constructor( + public obj: Expression, + public field: Token, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitGetExpression(this) + } +} + +export class SetExpression extends Expression { + constructor( + public obj: Expression, + public field: Token, + public value: Expression, + public location: Location + ) { + super() + } + + accept(visitor: ExpressionVisitor): T { + return visitor.visitSetExpression(this) + } +} diff --git a/app/javascript/interpreter/frames.ts b/app/javascript/interpreter/frames.ts new file mode 100644 index 0000000000..7281ff4e96 --- /dev/null +++ b/app/javascript/interpreter/frames.ts @@ -0,0 +1,134 @@ +import { type Callable } from './functions' +import { RuntimeError } from './error' + +export type FrameExecutionStatus = 'SUCCESS' | 'ERROR' +import type { EvaluationResult } from './evaluation-result' +import type { ExternalFunction } from './executor' + +export type FrameType = 'ERROR' | 'REPEAT' | 'EXPRESSION' + +export type Frame = { + line: number + code: string + status: FrameExecutionStatus + error?: RuntimeError + variables: Record + functions: Record + time: number + result?: EvaluationResult + data?: Record + description: string +} +export type FrameWithResult = Frame & { result: EvaluationResult } + +function isFrameWithResult(frame: Frame): frame is FrameWithResult { + return !!frame.result +} + +export function describeFrame( + frame: Frame, + externalFunctions: ExternalFunction[] +): string { + // These need to come from the exercise. + const functionDescriptions: Record = externalFunctions.reduce( + (acc: Record, fn: ExternalFunction) => { + acc[fn.name] = fn.description + return acc + }, + {} + ) + + if (!isFrameWithResult(frame)) { + return '

There is no information available for this line.

' + } + switch (frame.result.type) { + case 'VariableStatement': + return describeVariableStatement(frame) + case 'ForeachStatement': + return describeForeachStatement(frame) + case 'AssignExpression': + return describeAssignExpression(frame) + case 'IfStatement': + return describeIfStatement(frame) + case 'ReturnStatement': + return describeReturnStatement(frame) + case 'CallExpression': + return describeCallExpression(frame, functionDescriptions) + default: + return `

There is no information available for this line.

` + } +} + +function addExtraAssignInfo(frame: Frame, output: string) { + if (frame.result?.value == null) { + output += + '

null is a special keyword that signifies the lack of a real value. It is often used as a placeholder before we know what we should set a value to.

' + } + + return output +} + +function describeVariableStatement(frame: FrameWithResult) { + let output + if (frame.result.data?.updating) { + output = `

This updated the ${frame.result.name} variable to ${frame.result.value}.

` + } else { + output = `

This created a new variable called ${frame.result.name} and sets it to be equal to ${frame.result.value}.

` + } + output = addExtraAssignInfo(frame, output) + + return output +} + +function describeAssignExpression(frame: FrameWithResult) { + let output = `

This updated the variable called ${frame.result.name} to be equal to ${frame.result.value.expression}, which in this case is ${frame.result.value.value}.

` + output = addExtraAssignInfo(frame, output) + + return output +} + +function describeForeachStatement(frame: FrameWithResult) { + let output = `

This looped through ${frame.result.iterable.name} array. Each time this line of code is run, it selects the next item from the array and assigns to the ${frame.result.elementName} variable.

` + + if (frame.result.value) { + output += `

This iteration set ${frame.result.elementName} to:

` + output += `
${JSON.stringify(
+      frame.result.value,
+      null,
+      2
+    )}
` + } + + return output +} + +function describeIfStatement(frame: FrameWithResult) { + return '' + let output = `

This checks to see whether ${frame.result.condition.left.obj.expression} is greater than ${frame.result.condition.right.name}.

` + output += `

In this case, ${frame.result.condition.left.obj.expression} is set to ${frame.result.condition.left.obj.value} and ${frame.result.condition.right.name} is set to ${frame.result.condition.right.value} so the result is ${frame.result.value}.

` + return output +} +function describeReturnStatement(frame: FrameWithResult) { + let output = `

This returned the value of ${frame.result.value.name}, which in this case is ${frame.result.value.value}.

` + return output +} +function describeCallExpression( + frame: FrameWithResult, + functionDescriptions: any +) { + let output = `

This called the ${frame.result.callee.name} function` + if (frame.result.args.length > 0) { + const argsValues = frame.result.args.map((arg) => arg.value).join(', ') + output += ` with the values (${argsValues})` + } + output += `.

` + const descriptionTemplate = + functionDescriptions[frame.result.callee.name] || '' + const argsValues = frame.result.args.map((arg) => arg.value) + const interpolatedDescription = descriptionTemplate.replace( + /\${arg(\d+)}/g, + (_, index) => argsValues[index - 1] || '' + ) + output += interpolatedDescription + return output +} diff --git a/app/javascript/interpreter/functions.ts b/app/javascript/interpreter/functions.ts new file mode 100644 index 0000000000..f5bdece44f --- /dev/null +++ b/app/javascript/interpreter/functions.ts @@ -0,0 +1,60 @@ +import { Environment } from './environment' +import { Interpreter } from './interpreter' +import { FunctionStatement } from './statement' +import type { ExecutionContext } from './executor' + +export type Arity = number | [min: number, max: number] + +export interface Callable { + arity(): Arity + call(context: ExecutionContext, args: any[]): any +} + +export class ReturnValue extends Error { + constructor(public value: any) { + super() + } +} + +export function isCallable(obj: any): obj is Callable { + return obj instanceof Object && 'arity' in obj && 'call' in obj +} + +export class UserDefinedFunction implements Callable { + constructor( + private declaration: FunctionStatement, + private closure: Environment + ) {} + + arity(): Arity { + return [ + this.declaration.parameters.filter((p) => p.defaultValue === null).length, + this.declaration.parameters.length, + ] + } + + call(interpreter: Interpreter, args: any[]): any { + const environment = new Environment(this.closure) + + for (let i = 0; i < this.declaration.parameters.length; i++) { + const arg = + i < args.length + ? args[i] + : interpreter.evaluate(this.declaration.parameters[i].defaultValue!) + .value + environment.define(this.declaration.parameters[i].name.lexeme, arg) + } + + try { + interpreter.executeBlock(this.declaration.body, environment) + } catch (error: unknown) { + if (error instanceof ReturnValue) { + return error.value + } + + throw error + } + + return null + } +} diff --git a/app/javascript/interpreter/interpreter.ts b/app/javascript/interpreter/interpreter.ts new file mode 100644 index 0000000000..79c8bd9f7a --- /dev/null +++ b/app/javascript/interpreter/interpreter.ts @@ -0,0 +1,257 @@ +import { + RuntimeError, + type RuntimeErrorType, + type StaticError, + isStaticError, +} from './error' +import { Expression } from './expression' +import { Location } from './location' +import { Parser as JavaScriptParser } from './languages/javascript/parser' +import { Parser as JikiScriptParser } from './languages/jikiscript/parser' +import { Executor } from './executor' +import { Statement } from './statement' +import type { TokenType } from './token' +import { Resolver } from './resolver' +import { translate } from './translator' +import type { ExternalFunction } from './executor' +import type { Frame } from './frames' + +export type Language = 'JikiScript' | 'JavaScript' +const LanguageSettings = { + JikiScript: { + allowVariableReassigmment: true, + }, + JavaScript: { + allowVariableReassigmment: false, + }, +} + +interface ParserConstructor { + new ( + functionNames: string[], + languageFeatures: any, + wrapTopLevelStatements: boolean + ): Parser +} + +export interface Parser { + parse(sourceCode: string): Statement[] +} + +export type FrameContext = { + result: any + expression?: Expression + statement?: Statement +} + +export type Toggle = 'ON' | 'OFF' + +export type LanguageFeatures = { + IncludeList?: TokenType[] + ExcludeList?: TokenType[] + shadowing?: Toggle + truthiness?: Toggle +} + +export type Context = { + externalFunctions?: ExternalFunction[] + language?: Language + languageFeatures?: LanguageFeatures + state?: Record + wrapTopLevelStatements?: boolean +} + +export type EvaluateFunctionResult = { + value: any + frames: Frame[] + error: StaticError | null +} + +export type InterpretResult = { + frames: Frame[] + error: StaticError | null +} + +export function interpretJavaScript(sourceCode: string, context: Context = {}) { + return interpret(sourceCode, { ...context, language: 'JavaScript' }) +} +export function interpretJikiScript(sourceCode: string, context: Context = {}) { + return interpret(sourceCode, { ...context, language: 'JikiScript' }) +} +export function compile(sourceCode: string, context: Context = {}) { + const interpreter = new Interpreter(sourceCode, context) + try { + interpreter.compile() + } catch (data: any) { + return data + } + return {} +} +export function interpret( + sourceCode: string, + context: Context = {} +): InterpretResult { + const interpreter = new Interpreter(sourceCode, context) + try { + interpreter.compile() + } catch (data: any) { + return data + } + return interpreter.execute() +} + +export function evaluateJavaScriptFunction( + sourceCode: string, + context: Context = {}, + functionCall: string, + ...args: any[] +): EvaluateFunctionResult { + return evaluateFunction( + sourceCode, + { ...context, language: 'JavaScript' }, + functionCall, + ...args + ) +} +export function evaluateJikiScriptFunction( + sourceCode: string, + context: Context = {}, + functionCall: string, + ...args: any[] +): EvaluateFunctionResult { + return evaluateFunction( + sourceCode, + { ...context, language: 'JikiScript' }, + functionCall, + ...args + ) +} +export function evaluateFunction( + sourceCode: string, + context: Context = {}, + functionCall: string, + ...args: any[] +): EvaluateFunctionResult { + const interpreter = new Interpreter(sourceCode, context) + interpreter.compile() + const res = interpreter.evaluateFunction(functionCall, ...args) + // console.log(res) + return res +} + +export class Interpreter { + private readonly parser: Parser + private readonly resolver: Resolver + + private state: Record = {} + private language: Language + private parserType: ParserConstructor + private languageFeatures: LanguageFeatures = {} + private externalFunctions: ExternalFunction[] = [] + private wrapTopLevelStatements = false + + private statements: Statement[] = [] + + constructor(private readonly sourceCode: string, context: Context) { + // Set the instance variables based on the context that's been passed in. + this.language = context.language ? context.language : 'JavaScript' + this.parserType = + this.language == 'JavaScript' ? JavaScriptParser : JikiScriptParser + + if (context.state !== undefined) { + this.state = context.state + } + this.externalFunctions = context.externalFunctions + ? context.externalFunctions + : [] + if (context.languageFeatures !== undefined) { + this.languageFeatures = context.languageFeatures + } + + this.parser = new this.parserType( + this.externalFunctions.map((f) => f.name), + this.languageFeatures, + this.wrapTopLevelStatements + ) + this.resolver = new Resolver( + LanguageSettings[this.language].allowVariableReassigmment, + this.externalFunctions.map((f) => f.name) + ) + } + + public compile() { + try { + this.statements = this.parser.parse(this.sourceCode) + this.resolver.resolve(this.statements) + } catch (error: unknown) { + throw { frames: [], error: error } + } + } + + public execute(): InterpretResult { + const executor = new Executor( + this.sourceCode, + this.languageFeatures, + this.externalFunctions, + this.resolver.locals, + this.state + ) + return executor.execute(this.statements) + } + + public evaluateFunction( + name: string, + ...args: any[] + ): EvaluateFunctionResult { + const callingCode = `${name}(${args + .map((arg) => JSON.stringify(arg)) + .join(', ')})` + + // Create a new parser with wrapTopLevelStatements set to false + // and use it to generate the calling statements. + const callingStatements = new this.parserType( + this.externalFunctions.map((f) => f.name), + this.languageFeatures, + false + ).parse(callingCode) + + if (callingStatements.length !== 1) + this.error('CouldNotEvaluateFunction', Location.unknown, { + callingStatements, + }) + + try { + this.resolver.resolve(callingStatements) + } catch (error: unknown) { + if (isStaticError(error)) { + return { value: undefined, frames: [], error: error } + } + } + + const executor = new Executor( + this.sourceCode, + this.languageFeatures, + this.externalFunctions, + this.resolver.locals + ) + executor.execute(this.statements) + return executor.evaluateSingleExpression(callingStatements[0]) + } + + // public resolve(expression: Expression, depth: number): void { + // this.resolver.locals.set(expression, depth); + // } + + private error( + type: RuntimeErrorType, + location: Location | null, + context: any = {} + ): never { + throw new RuntimeError( + translate(`error.runtime.${type}`, context), + location, + type, + context + ) + } +} diff --git a/app/javascript/interpreter/languages/javascript/error.ts b/app/javascript/interpreter/languages/javascript/error.ts new file mode 100644 index 0000000000..9e6bee0b10 --- /dev/null +++ b/app/javascript/interpreter/languages/javascript/error.ts @@ -0,0 +1,56 @@ +export type SyntaxErrorType = + | 'UnknownCharacter' + | 'MissingDoubleQuoteToStartString' + | 'MissingDoubleQuoteToTerminateString' + | 'MissingFieldNameOrIndexAfterLeftBracket' + | 'MissingRightParenthesisAfterExpression' + | 'MissingRightBraceToTerminatePlaceholder' + | 'MissingBacktickToTerminateTemplateLiteral' + | 'MissingExpression' + | 'InvalidAssignmentTarget' + | 'ExceededMaximumNumberOfParameters' + | 'MissingEndOfLine' + | 'MissingFunctionName' + | 'MissingLeftParenthesisAfterFunctionName' + | 'MissingLeftParenthesisAfterFunctionCall' + | 'MissingParameterName' + | 'MissingRightParenthesisAfterParameters' + | 'MissingLeftBraceToStartFunctionBody' + | 'MissingLeftBraceToStartWhileBody' + | 'MissingLeftParenthesisAfterWhile' + | 'MissingRightParenthesisAfterWhileCondition' + | 'MissingLeftBraceToStartDoWhileBody' + | 'MissingWhileBeforeDoWhileCondition' + | 'MissingLeftParenthesisAfterDoWhile' + | 'MissingRightParenthesisAfterDoWhileCondition' + | 'MissingLeftBraceToStartRepeatBody' + | 'MissingVariableName' + | 'MissingConstantName' + | 'MissingEqualsSignAfterVariableNameToInitializeValue' + | 'MissingEqualsSignAfterConstantNameToInitializeValue' + | 'MissingLeftParenthesisBeforeIfCondition' + | 'MissingRightParenthesisAfterIfCondition' + | 'MissingLeftBraceToStartFunctionBody' + | 'MissingLeftBraceToStartFunctionBody' + | 'MissingLeftBraceToStartIfBody' + | 'MissingLeftBraceToStartElseBody' + | 'MissingDoAfterRepeatStatementCondition' + | 'MissingDoAfterWhileStatementCondition' + | 'MissingLeftParenthesisAfterForeach' + | 'MissingLetInForeachCondition' + | 'MissingElementNameAfterForeach' + | 'MissingOfAfterElementNameInForeach' + | 'MissingRightParenthesisAfterForeachElement' + | 'MissingLeftBraceToStartForeachBody' + | 'MissingRightBraceAfterBlock' + | 'MissingRightBracketAfterFieldNameOrIndex' + | 'MissingRightParenthesisAfterFunctionCall' + | 'MissingRightParenthesisAfterExpression' + | 'MissingRightBracketAfterListElements' + | 'MissingRightBraceAfterMapElements' + | 'MissingStringAsKey' + | 'MissingColonAfterKey' + | 'MissingFieldNameOrIndexAfterOpeningBracket' + | 'InvalidTemplateLiteral' + | 'MissingColonAfterThenBranchOfTernaryOperator' + | 'NumberWithMultipleDecimalPoints' diff --git a/app/javascript/interpreter/languages/javascript/parser.ts b/app/javascript/interpreter/languages/javascript/parser.ts new file mode 100644 index 0000000000..5f0483b0eb --- /dev/null +++ b/app/javascript/interpreter/languages/javascript/parser.ts @@ -0,0 +1,864 @@ +import { SyntaxError } from '../../error' +import { type SyntaxErrorType } from './error' +import { + ArrayExpression, + AssignExpression, + BinaryExpression, + CallExpression, + Expression, + GroupingExpression, + LiteralExpression, + LogicalExpression, + DictionaryExpression, + UnaryExpression, + VariableExpression, + GetExpression, + SetExpression, + TemplateLiteralExpression, + TemplatePlaceholderExpression, + TemplateTextExpression, + UpdateExpression, + TernaryExpression, +} from '../../expression' +import type { LanguageFeatures } from '../../interpreter' +import { Location } from '../../location' +import { Scanner } from './scanner' +import { + BlockStatement, + ConstantStatement, + DoWhileStatement, + ExpressionStatement, + ForeachStatement, + FunctionParameter, + FunctionStatement, + IfStatement, + RepeatStatement, + RepeatUntilGameOverStatement, + ReturnStatement, + Statement, + VariableStatement, + WhileStatement, +} from '../../statement' +import type { Token, TokenType } from './token' +import { translate } from '../../translator' + +export class Parser { + private readonly scanner: Scanner + private current: number = 0 + private tokens: Token[] = [] + + constructor( + private functionNames: string[] = [], + languageFeatures: LanguageFeatures, + private shouldWrapTopLevelStatements: boolean + ) { + this.scanner = new Scanner(languageFeatures) + } + + public parse(sourceCode: string): Statement[] { + this.tokens = this.scanner.scanTokens(sourceCode) + + const statements = [] + + while (!this.isAtEnd()) statements.push(this.declarationStatement()) + + if (this.shouldWrapTopLevelStatements) + return this.wrapTopLevelStatements(statements) + + return statements + } + + wrapTopLevelStatements(statements: Statement[]): Statement[] { + const functionStmt = new FunctionStatement( + { + type: 'IDENTIFIER', + lexeme: 'main', + literal: null, + location: Location.unknown, + }, + [], + [], + Location.unknown + ) + + for (let i = statements.length - 1; i >= 0; i--) { + // Don't wrap top-level function statements + if (statements[i] instanceof FunctionStatement) continue + + functionStmt.body.unshift(statements[i]) + statements.splice(i, 1) + } + + statements.push(functionStmt) + return statements + } + + private declarationStatement(): Statement { + if (this.match('FUNCTION')) return this.functionStatement() + + return this.statement() + } + + private functionStatement(): Statement { + const name = this.consume('IDENTIFIER', 'MissingFunctionName') + this.consume('LEFT_PAREN', 'MissingLeftParenthesisAfterFunctionName', { + name, + }) + const parameters: FunctionParameter[] = [] + if (!this.check('RIGHT_PAREN')) { + do { + if (parameters.length > 255) { + this.error( + 'ExceededMaximumNumberOfParameters', + this.peek().location, + { + maximum: 255, + actual: parameters.length, + name, + } + ) + } + + const parameterName = this.consume( + 'IDENTIFIER', + 'MissingParameterName', + { + name: name, + } + ) + + let defaultValue: Expression | null = null + + if (this.match('EQUAL')) { + defaultValue = this.expression() + } + + parameters.push(new FunctionParameter(parameterName, defaultValue)) + } while (this.match('COMMA')) + } + this.consume('RIGHT_PAREN', 'MissingRightParenthesisAfterParameters', { + name, + parameters, + }) + this.consume('LEFT_BRACE', 'MissingLeftBraceToStartFunctionBody', { name }) + this.consumeEndOfLine() + + const body = this.block() + this.functionNames.push(name.lexeme) + return new FunctionStatement( + name, + parameters, + body, + Location.between(name, this.previous()) + ) + } + + private statement(): Statement { + if (this.match('LET')) return this.letStatement() + if (this.match('CONST')) return this.constStatement() + if (this.match('IF')) return this.ifStatement() + if (this.match('RETURN')) return this.returnStatement() + if (this.match('REPEAT_UNTIL_GAME_OVER')) + return this.repeatUntilGameOverStatement() + if (this.match('WHILE')) return this.whileStatement() + if (this.match('DO')) return this.doWhileStatement() + if (this.match('FOR')) return this.foreachStatement() + if (this.match('LEFT_BRACE')) return this.blockStatement() + + return this.expressionStatement() + } + + private letStatement(): Statement { + const letToken = this.previous() + const name = this.consume('IDENTIFIER', 'MissingVariableName') + this.consume( + 'EQUAL', + 'MissingEqualsSignAfterVariableNameToInitializeValue', + { + name, + } + ) + + const initializer = this.expression() + this.consumeEndOfLine() + + return new VariableStatement( + name, + initializer, + Location.between(letToken, initializer) + ) + } + + private constStatement(): Statement { + const constToken = this.previous() + const name = this.consume('IDENTIFIER', 'MissingConstantName') + this.consume( + 'EQUAL', + 'MissingEqualsSignAfterConstantNameToInitializeValue', + { + name, + } + ) + + const initializer = this.expression() + this.consumeEndOfLine() + + return new ConstantStatement( + name, + initializer, + Location.between(constToken, initializer) + ) + } + + private ifStatement(): Statement { + const ifToken = this.previous() + this.consume('LEFT_PAREN', 'MissingLeftParenthesisBeforeIfCondition') + const condition = this.expression() + this.consume('RIGHT_PAREN', 'MissingRightParenthesisAfterIfCondition', { + condition, + }) + this.consume('LEFT_BRACE', 'MissingLeftBraceToStartIfBody') + const thenBranch = this.blockStatement() + let elseBranch = null + + if (this.match('ELSE')) { + if (this.match('IF')) { + elseBranch = this.ifStatement() + } else { + this.consume('LEFT_BRACE', 'MissingLeftBraceToStartElseBody') + elseBranch = this.blockStatement() + } + } + + return new IfStatement( + condition, + thenBranch, + elseBranch, + Location.between(ifToken, this.previous()) + ) + } + + private returnStatement(): Statement { + const keyword = this.previous() + const value: Expression | null = this.isAtEndOfStatement() + ? null + : this.expression() + + this.consumeEndOfLine() + + return new ReturnStatement( + keyword, + value, + Location.between(keyword, value || keyword) + ) + } + + private repeatUntilGameOverStatement(): Statement { + const begin = this.previous() + + this.consume('LEFT_BRACE', 'MissingLeftBraceToStartRepeatBody') + this.consumeEndOfLine() + + const statements = this.block() + + return new RepeatUntilGameOverStatement( + statements, + Location.between(begin, this.previous()) + ) + } + + private whileStatement(): Statement { + const begin = this.previous() + this.consume('LEFT_PAREN', 'MissingLeftParenthesisAfterWhile') + const condition = this.expression() + this.consume('RIGHT_PAREN', 'MissingRightParenthesisAfterWhileCondition', { + condition, + }) + + this.consume('LEFT_BRACE', 'MissingLeftBraceToStartWhileBody') + this.consumeEndOfLine() + + const statements = this.block() + + return new WhileStatement( + condition, + statements, + Location.between(begin, this.previous()) + ) + } + + private doWhileStatement(): Statement { + const begin = this.previous() + + this.consume('LEFT_BRACE', 'MissingLeftBraceToStartDoWhileBody') + this.consumeEndOfLine() + + const statements = this.block() + + this.consume('WHILE', 'MissingWhileBeforeDoWhileCondition') + + this.consume('LEFT_PAREN', 'MissingLeftParenthesisAfterDoWhile') + const condition = this.expression() + this.consume( + 'RIGHT_PAREN', + 'MissingRightParenthesisAfterDoWhileCondition', + { + condition, + } + ) + + this.consumeEndOfLine() + + return new DoWhileStatement( + condition, + statements, + Location.between(begin, this.previous()) + ) + } + + private foreachStatement(): Statement { + const foreachToken = this.previous() + this.consume('LEFT_PAREN', 'MissingLeftParenthesisAfterForeach') + this.consume('LET', 'MissingLetInForeachCondition') + const elementName = this.consume( + 'IDENTIFIER', + 'MissingElementNameAfterForeach' + ) + this.consume('OF', 'MissingOfAfterElementNameInForeach', { + elementName, + }) + const iterable = this.expression() + + this.consume('RIGHT_PAREN', 'MissingRightParenthesisAfterForeachElement', { + iterable, + }) + this.consume('LEFT_BRACE', 'MissingLeftBraceToStartForeachBody') + this.consumeEndOfLine() + + const statements = this.block() + + return new ForeachStatement( + elementName, + iterable, + statements, + Location.between(foreachToken, this.previous()) + ) + } + + private blockStatement(): BlockStatement { + const leftBraceToken = this.previous() + this.consumeEndOfLine() + const statements = this.block() + + return new BlockStatement( + statements, + Location.between(leftBraceToken, this.previous()) + ) + } + + private block(): Statement[] { + const statements: Statement[] = [] + + while (!this.check('RIGHT_BRACE') && !this.isAtEnd()) { + statements.push(this.statement()) + } + + this.consume('RIGHT_BRACE', 'MissingRightBraceAfterBlock') + this.consumeEndOfLine() + return statements + } + + private expressionStatement(): Statement { + const expression = this.expression() + this.consumeEndOfLine() + + return new ExpressionStatement(expression, expression.location) + } + + private expression(): Expression { + return this.assignment() + } + + private assignment(): Expression { + const expr = this.ternary() + + if ( + this.match( + 'EQUAL', + 'SLASH_EQUAL', + 'STAR_EQUAL', + 'PLUS_EQUAL', + 'MINUS_EQUAL' + ) + ) { + const operator = this.previous() + const value = this.assignment() + + if (expr instanceof VariableExpression) { + return new AssignExpression( + expr.name, + operator, + value, + Location.between(expr, value) + ) + } + + if (expr instanceof GetExpression) { + return new SetExpression( + expr.obj, + expr.field, + value, + Location.between(expr, value) + ) + } + + this.error('InvalidAssignmentTarget', expr.location, { + assignmentTarget: expr, + }) + } + + return expr + } + + private ternary(): Expression { + const expr = this.or() + + if (this.match('QUESTION_MARK')) { + const then = this.ternary() + this.consume('COLON', 'MissingColonAfterThenBranchOfTernaryOperator', { + then, + }) + const else_ = this.ternary() + return new TernaryExpression( + expr, + then, + else_, + Location.between(expr, else_) + ) + } + + return expr + } + + private or(): Expression { + const expr = this.and() + + while (this.match('OR', 'PIPE_PIPE')) { + let operator = this.previous() + operator.type = 'OR' + const right = this.and() + return new LogicalExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private and(): Expression { + const expr = this.equality() + + while (this.match('AND', 'AMPERSAND_AMPERSAND')) { + let operator = this.previous() + operator.type = 'AND' + const right = this.equality() + return new LogicalExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private equality(): Expression { + let expr = this.comparison() + + while ( + this.match( + 'EQUALITY', + 'STRICT_INEQUALITY', + 'INEQUALITY', + 'STRICT_EQUALITY' + ) + ) { + const operator = this.previous() + const right = this.comparison() + expr = new BinaryExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private comparison(): Expression { + let expr = this.term() + + while (this.match('GREATER', 'GREATER_EQUAL', 'LESS', 'LESS_EQUAL')) { + const operator = this.previous() + const right = this.term() + expr = new BinaryExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private term(): Expression { + let expr = this.factor() + + while (this.match('MINUS', 'PLUS')) { + const operator = this.previous() + const right = this.factor() + expr = new BinaryExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private factor(): Expression { + let expr = this.unary() + + while (this.match('SLASH', 'STAR')) { + const operator = this.previous() + const right = this.unary() + expr = new BinaryExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private unary(): Expression { + if (this.match('NOT', 'MINUS')) { + const operator = this.previous() + const right = this.unary() + return new UnaryExpression( + operator, + right, + Location.between(operator, right) + ) + } + + return this.postfix() + } + + private postfix(): Expression { + const expression = this.call() + + if (this.match('PLUS_PLUS', 'MINUS_MINUS')) { + const operator = this.previous() + + return new UpdateExpression( + expression, + operator, + Location.between(operator, expression) + ) + } + + return expression + } + + private call(): Expression { + let expression = this.primary() + + while (true) { + if (this.match('LEFT_PAREN')) { + expression = this.finishCall(expression) + } else if (this.match('LEFT_BRACKET')) { + const leftBracket = this.previous() + if (!this.match('STRING', 'NUMBER')) + this.error( + 'MissingFieldNameOrIndexAfterLeftBracket', + leftBracket.location, + { + expression, + } + ) + + const name = this.previous() + const rightBracket = this.consume( + 'RIGHT_BRACKET', + 'MissingRightBracketAfterFieldNameOrIndex', + { expression, name } + ) + expression = new GetExpression( + expression, + name, + Location.between(expression, rightBracket) + ) + } else { + if ( + expression instanceof VariableExpression && + this.functionNames.includes(expression.name.lexeme) && + this.match('RIGHT_PAREN') + ) + this.error( + 'MissingLeftParenthesisAfterFunctionCall', + this.previous().location, + { expression, function: expression.name.lexeme } + ) + break + } + } + + return expression + } + + private finishCall(callee: Expression): Expression { + const args: Expression[] = [] + + if (!this.check('RIGHT_PAREN')) { + do { + args.push(this.expression()) + } while (this.match('COMMA')) + } + + const paren = this.consume( + 'RIGHT_PAREN', + 'MissingRightParenthesisAfterFunctionCall', + { + args, + function: + callee instanceof VariableExpression ? callee.name.lexeme : null, + } + ) + return new CallExpression( + callee, + paren, + args, + Location.between(callee, paren) + ) + } + + private primary(): Expression { + if (this.match('LEFT_BRACKET')) return this.array() + + if (this.match('LEFT_BRACE')) return this.dictionary() + + if (this.match('FALSE')) + return new LiteralExpression(false, this.previous().location) + + if (this.match('TRUE')) + return new LiteralExpression(true, this.previous().location) + + if (this.match('NULL')) + return new LiteralExpression(null, this.previous().location) + + if (this.match('NUMBER', 'STRING')) + return new LiteralExpression( + this.previous().literal, + this.previous().location + ) + + if (this.match('IDENTIFIER')) + return new VariableExpression(this.previous(), this.previous().location) + + if (this.match('BACKTICK')) return this.templateLiteral() + + if (this.match('LEFT_PAREN')) { + const lparen = this.previous() + const expression = this.expression() + const rparen = this.consume( + 'RIGHT_PAREN', + 'MissingRightParenthesisAfterExpression', + { + expression, + } + ) + return new GroupingExpression( + expression, + Location.between(lparen, rparen) + ) + } + + this.error('MissingExpression', this.peek().location) + } + + private templateLiteral(): Expression { + const openBacktick = this.previous() + const parts: Expression[] = [] + + while (this.peek().type != 'BACKTICK') { + if (this.match('DOLLAR_LEFT_BRACE')) { + const dollarLeftBrace = this.previous() + const expr = this.expression() + const rightBrace = this.consume( + 'RIGHT_BRACE', + 'MissingRightBraceToTerminatePlaceholder', + { expr } + ) + parts.push( + new TemplatePlaceholderExpression( + expr, + Location.between(dollarLeftBrace, rightBrace) + ) + ) + } else { + const textToken = this.consume( + 'TEMPLATE_LITERAL_TEXT', + 'InvalidTemplateLiteral' + ) + parts.push(new TemplateTextExpression(textToken, textToken.location)) + } + } + + const closeBacktick = this.consume( + 'BACKTICK', + 'MissingBacktickToTerminateTemplateLiteral', + { elements: parts } + ) + return new TemplateLiteralExpression( + parts, + Location.between(openBacktick, closeBacktick) + ) + } + + private array(): Expression { + const leftBracket = this.previous() + const elements: Expression[] = [] + + if (!this.check('RIGHT_BRACKET')) { + do { + elements.push(this.or()) + } while (this.match('COMMA')) + } + + const rightBracket = this.consume( + 'RIGHT_BRACKET', + 'MissingRightBracketAfterListElements', + { elements } + ) + return new ArrayExpression( + elements, + Location.between(leftBracket, rightBracket) + ) + } + + private dictionary(): Expression { + const leftBrace = this.previous() + const elements = new Map() + + if (!this.check('RIGHT_BRACE')) { + do { + const key = this.consume('STRING', 'MissingStringAsKey') + this.consume('COLON', 'MissingColonAfterKey') + elements.set(key.literal, this.primary()) + } while (this.match('COMMA')) + } + + const rightBracket = this.consume( + 'RIGHT_BRACE', + 'MissingRightBraceAfterMapElements', + { elements } + ) + return new DictionaryExpression( + elements, + Location.between(leftBrace, rightBracket) + ) + } + + private match(...tokenTypes: TokenType[]): boolean { + for (const tokenType of tokenTypes) { + if (this.check(tokenType)) { + this.advance() + return true + } + } + return false + } + + private check(tokenType: TokenType): boolean { + if (this.isAtEnd()) return false + return this.peek().type == tokenType + } + + private advance(): Token { + if (!this.isAtEnd()) this.current++ + return this.previous() + } + + private consume( + tokenType: TokenType, + type: SyntaxErrorType, + context?: any + ): Token { + if (this.check(tokenType)) return this.advance() + + this.error(type, this.peek().location, context) + } + + private consumeEndOfLine(): void { + this.consume('EOL', 'MissingEndOfLine') + } + + private error( + type: SyntaxErrorType, + location: Location, + context?: any + ): never { + throw new SyntaxError( + translate(`error.syntax.${type}`, context), + location, + type, + context + ) + } + + private isAtEnd(): boolean { + return this.peek().type == 'EOF' + } + + private isAtEndOfStatement(): boolean { + return this.peek().type == 'EOL' || this.isAtEnd() + } + + private peek(): Token { + return this.tokens[this.current] + } + + private previous(): Token { + return this.tokens[this.current - 1] + } +} + +export function parse( + sourceCode: string, + { + functionNames = [], + languageFeatures = {}, + shouldWrapTopLevelStatements = false, + }: { + functionNames?: string[] + languageFeatures?: LanguageFeatures + shouldWrapTopLevelStatements?: boolean + } = {} +): Statement[] { + return new Parser( + functionNames, + languageFeatures, + shouldWrapTopLevelStatements + ).parse(sourceCode) +} diff --git a/app/javascript/interpreter/languages/javascript/scanner.ts b/app/javascript/interpreter/languages/javascript/scanner.ts new file mode 100644 index 0000000000..02d777ab6f --- /dev/null +++ b/app/javascript/interpreter/languages/javascript/scanner.ts @@ -0,0 +1,490 @@ +/* + * The scanner is the first part of the interpreter. + * It takes the source code as input and produces a list of tokens, that + * represent the different conceptual elements of the source code. For example, + * it takes a whole string and reduces it into a STRING token, and it takes an + * equals sign and turns it into an EQUAL token. + * + * These tokens will then be used by the parser to build a tree of expressions, + * which will be used by the interpreter to execute the program. + * + * The main workflow here is looking at the next character in the source code, + * and then deciding what to do with it. Sometimes we just immediate "consume" it + * (turn it into a token), but other times we need to peak ahead and see what comes + * next to know what token to produce or how to handle it. + * + * This process will also produce errors if the source code is invalid, for example + * if we see an unterminated string, or a number with multiple decimal points. + */ +import { + DisabledLanguageFeatureError, + type DisabledLanguageFeatureErrorType, + SyntaxError, +} from '../../error' +import { type SyntaxErrorType } from './error' +import type { Token, TokenType } from './token' +import { Location } from '../../location' +import type { LanguageFeatures } from '../../interpreter' +import { translate } from '../../translator' + +export class Scanner { + private tokens: Token[] = [] + private start: number = 0 + private current: number = 0 + private line: number = 1 + private lineOffset: number = 0 + private sourceCode: string = '' + + private static readonly keywords: Record = { + and: 'AND', + const: 'CONST', + do: 'DO', + else: 'ELSE', + false: 'FALSE', + for: 'FOR', + function: 'FUNCTION', + if: 'IF', + in: 'IN', + let: 'LET', + null: 'NULL', + of: 'OF', + or: 'OR', + repeatUntilGameOver: 'REPEAT_UNTIL_GAME_OVER', + return: 'RETURN', + true: 'TRUE', + while: 'WHILE', + } + + private readonly tokenizers: Record = { + '(': this.tokenizeLeftParanthesis, + ')': this.tokenizeRightParanthesis, + '{': this.tokenizeLeftBrace, + '}': this.tokenizeRightBrace, + '[': this.tokenizeLeftBracket, + ']': this.tokenizeRightBracket, + ':': this.tokenizeColon, + ',': this.tokenizeComma, + '+': this.tokenizePlus, + '-': this.tokenizeMinus, + '*': this.tokenizeStar, + '/': this.tokenizeSlash, + '=': this.tokenizeEquals, + '!': this.tokenizeBang, + '>': this.tokenizeGreater, + '<': this.tokenizeLess, + '?': this.tokenizeQuestionMark, + ' ': this.tokenizeWhitespace, + '\t': this.tokenizeWhitespace, + '\r': this.tokenizeWhitespace, + '\n': this.tokenizeNewline, + '"': this.tokenizeString, + '`': this.tokenizeTemplateLiteral, + } + + constructor(private languageFeatures: LanguageFeatures = {}) {} + + scanTokens(sourceCode: string): Token[] { + this.sourceCode = sourceCode + this.reset() + + while (!this.isAtEnd()) { + this.start = this.current + this.scanToken() + } + + // Add synthetic EOL token to simplify parsing + if (this.shouldAddEOLToken()) this.addSyntheticToken('EOL', '\n') + + // Add synthetic EOF token to simplify parsing + this.addSyntheticToken('EOF', '\0') + + return this.tokens + } + + private scanToken(): void { + const c = this.advance() + + const tokenizer = this.tokenizers[c] + if (tokenizer) { + tokenizer.bind(this)() + } else { + if (c == '&' && this.match('&')) { + this.addToken('AMPERSAND_AMPERSAND') + } else if (c == '|' && this.match('|')) { + this.addToken('PIPE_PIPE') + } else if (this.isDigit(c)) { + this.tokenizeNumber() + } else if (this.isAlpha(c)) { + this.tokenizeIdentifier() + } else { + this.error('UnknownCharacter', { + character: c, + }) + } + } + } + + /** + * These are tokenizers. The purpose of a tokenizer is to consume characters from the source code + * and produce a token. The token is then added to the list of tokens. + * + * For example, if we see a left paranthesis, we add a token of type "LEFT_PAREN" to the list of tokens. + * + * Some tokens are more complex. For example if we see an equals sign, we need to check if the next character + * is also an equals sign. If it is, we add a token of type "EQUAL_EQUAL" to the list of tokens. If it is not, + * we add a token of type "EQUAL" to the list of tokens. + * + * Some are even more complex. For example, if we see a double quote, we need to consume characters until we see + * another double quote. We then add a token of type "STRING" to the list of tokens + * with all the characters between the double quotes consumed. + */ + + /* This first set of tokenizers are simple. They consume a single character and add a token to the list of tokens, + * or do simple checks for the next characters (e.g. "++") + */ + private tokenizeLeftParanthesis() { + this.addToken('LEFT_PAREN') + } + private tokenizeRightParanthesis() { + this.addToken('RIGHT_PAREN') + } + private tokenizeLeftBrace() { + this.addToken('LEFT_BRACE') + } + private tokenizeRightBrace() { + this.addToken('RIGHT_BRACE') + } + private tokenizeLeftBracket() { + this.addToken('LEFT_BRACKET') + } + private tokenizeRightBracket() { + this.addToken('RIGHT_BRACKET') + } + private tokenizeColon() { + this.addToken('COLON') + } + private tokenizeComma() { + this.addToken('COMMA') + } + private tokenizePlus() { + this.addToken( + this.match('=') ? 'PLUS_EQUAL' : this.match('+') ? 'PLUS_PLUS' : 'PLUS' + ) + } + private tokenizeMinus() { + this.addToken( + this.match('=') + ? 'MINUS_EQUAL' + : this.match('-') + ? 'MINUS_MINUS' + : 'MINUS' + ) + } + private tokenizeStar() { + this.addToken(this.match('=') ? 'STAR_EQUAL' : 'STAR') + } + private tokenizeSlash() { + if (this.match('=')) { + this.addToken('SLASH_EQUAL') + } else { + this.addToken('SLASH') + } + } + private tokenizeEquals() { + this.addToken( + this.match('=') + ? this.match('=') + ? 'STRICT_EQUALITY' + : 'EQUALITY' + : 'EQUAL' + ) + } + private tokenizeBang() { + this.addToken( + this.match('=') + ? this.match('=') + ? 'STRICT_INEQUALITY' + : 'INEQUALITY' + : 'NOT' + ) + } + private tokenizeGreater() { + this.addToken(this.match('=') ? 'GREATER_EQUAL' : 'GREATER') + } + private tokenizeLess() { + this.addToken(this.match('=') ? 'LESS_EQUAL' : 'LESS') + } + private tokenizeQuestionMark() { + this.addToken('QUESTION_MARK') + } + + /* + * We don't tokenize whitespace, but we do need to match on it + */ + private tokenizeWhitespace() { + return + } + + /* + * The new line tokenizer not only adds a token, but also increments the line number + * and resets the line offset to the next character. + */ + private tokenizeNewline() { + if (this.shouldAddEOLToken()) this.addToken('EOL') + + this.line++ + this.lineOffset = this.current + } + + private tokenizeString(): void { + // Keep consuming characters until we see another double quote + // and then stop before we consume it. + while (this.peek() != '"' && this.isAnotherCharacter()) this.advance() + + // If we reach the end of the line, we have an unterminated string + if (this.peek() != '"') + if (this.previouslyAddedToken() == 'IDENTIFIER') + this.error('MissingDoubleQuoteToStartString', { + string: this.tokens[this.tokens.length - 1].lexeme, + }) + else + this.error('MissingDoubleQuoteToTerminateString', { + string: this.sourceCode.substring(this.start + 1, this.current), + }) + + // Consume the closing quotation mark + this.advance() + + // Finally add the token, with its value set to the characters between the quotes + this.addToken( + 'STRING', + this.sourceCode.substring(this.start + 1, this.current - 1) + ) + } + + // TODO: Check whether this errors correctly if split over lines + private tokenizeTemplateLiteral(): void { + this.addToken('BACKTICK') + + while (this.peek() != '`' && this.isAnotherCharacter()) { + this.start = this.current + + if (this.peek() != '$' && this.peekNext() != '{' && !this.isAtEnd()) { + while ( + this.peek() != '$' && + this.peek() != '`' && + this.peekNext() != '{' && + !this.isAtEnd() + ) + this.advance() + + this.addToken( + 'TEMPLATE_LITERAL_TEXT', + this.sourceCode.substring(this.start, this.current) + ) + } else { + this.advance() // Consume the $ + this.advance() // Consume the { + this.addToken('DOLLAR_LEFT_BRACE') + this.start = this.current + + while (this.peek() != '}' && !this.isAtEnd()) { + this.start = this.current + this.scanToken() + } + + if (this.isAtEnd()) + this.error('MissingRightBraceToTerminatePlaceholder') + + this.start = this.current + this.advance() + this.addToken('RIGHT_BRACE') // Consume the } + } + } + + if (this.isAtEnd()) this.error('MissingBacktickToTerminateTemplateLiteral') + + this.start = this.current + this.advance() + this.addToken('BACKTICK') // Consume the closing ` + } + + /* + * For numbers, we consume any digits and a single decimal point, if present. + * We then add a token with the value of the number. + */ + private tokenizeNumber(): void { + while (this.isDigit(this.peek()) || this.peek() == '.') this.advance() + + const number = this.sourceCode.substring(this.start, this.current) + + // Guard against numbers with multiple decimal points (e.g. "1.2.4") + if (number.split('.').length > 2) { + const parts = number.split('.') + const suggestion = parts[0] + '.' + parts.slice(1).join('') + this.error('NumberWithMultipleDecimalPoints', { + suggestion: suggestion, + }) + } + + this.addToken('NUMBER', Number.parseFloat(number)) + } + + private tokenizeIdentifier(): void { + while (this.isAlphaNumeric(this.peek())) this.advance() + + const keywordType = Scanner.keywords[this.lexeme()] + if (keywordType) return this.addToken(keywordType) + + this.addToken('IDENTIFIER') + } + + private addSyntheticToken(type: TokenType, lexeme: string): void { + this.tokens.push({ + type, + lexeme: lexeme, + literal: null, + location: this.location(), + }) + } + + private addToken(type: TokenType, literal: any = null): void { + this.verifyEnabled(type) + + this.tokens.push({ + type, + lexeme: this.lexeme(), + literal, + location: this.location(), + }) + } + + private isAlpha(c: string): boolean { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' + } + + private isDigit(c: string): boolean { + return c >= '0' && c <= '9' + } + + private isAlphaNumeric(c: string): boolean { + return this.isAlpha(c) || this.isDigit(c) + } + + private isAtEnd(): boolean { + return this.current >= this.sourceCode.length + } + + // TODO: What is the purpose of these checks? + private isAnotherCharacter(): boolean { + const next = this.peek() + if (next == '\n') return false + if (next == '\0') return false + return true + } + + private shouldAddEOLToken(): boolean { + return ( + this.previouslyAddedToken() != null && + this.previouslyAddedToken() != 'EOL' + ) + } + + private advance(): string { + return this.sourceCode[this.current++] + } + + private peek(): string { + if (this.isAtEnd()) return '\0' + return this.sourceCode[this.current] + } + + private peekNext(): string { + if (this.current + 1 >= this.sourceCode.length) return '\0' + return this.sourceCode[this.current + 1] + } + + private previouslyAddedToken(): TokenType | null { + if (this.tokens.length === 0) return null + return this.tokens[this.tokens.length - 1].type + } + + private match(expected: string): boolean { + if (this.isAtEnd()) return false + if (this.sourceCode[this.current] != expected) return false + + this.current++ + return true + } + + private lexeme(): string { + return this.sourceCode.substring(this.start, this.current) + } + + private location(): Location { + return Location.fromLineOffset( + this.start + 1, + this.current + 1, + this.line, + this.lineOffset + ) + } + + private reset() { + this.tokens = [] + this.start = 0 + this.current = 0 + this.line = 1 + this.lineOffset = 0 + } + + private verifyEnabled(tokenType: TokenType): void { + if (!this.languageFeatures) return + + if ( + this.languageFeatures.ExcludeList && + this.languageFeatures.ExcludeList.includes(tokenType) + ) + this.disabledLanguageFeatureError('ExcludeListViolation', { + ExcludeList: this.languageFeatures.ExcludeList, + tokenType, + }) + + if ( + this.languageFeatures.IncludeList && + !this.languageFeatures.IncludeList.includes(tokenType) + ) + this.disabledLanguageFeatureError('IncludeListViolation', { + IncludeList: this.languageFeatures.IncludeList, + tokenType, + }) + } + + private error(type: SyntaxErrorType, context: any = {}): never { + throw new SyntaxError( + translate(`error.syntax.${type}`, context), + this.location(), + type, + context + ) + } + + private disabledLanguageFeatureError( + type: DisabledLanguageFeatureErrorType, + context: any + ): never { + throw new DisabledLanguageFeatureError( + translate(`error.disabledLanguageFeature.${type}`, context), + this.location(), + type, + context + ) + } +} + +export function scan( + sourceCode: string, + ...args: [LanguageFeatures?] +): Token[] { + return new Scanner(...args).scanTokens(sourceCode) +} diff --git a/app/javascript/interpreter/languages/javascript/token.ts b/app/javascript/interpreter/languages/javascript/token.ts new file mode 100644 index 0000000000..15e25a0f11 --- /dev/null +++ b/app/javascript/interpreter/languages/javascript/token.ts @@ -0,0 +1,77 @@ +import { Location } from '../../location' + +export type TokenType = + // Single-character tokens + | 'BACKTICK' + | 'COLON' + | 'COMMA' + | 'LEFT_BRACE' + | 'LEFT_BRACKET' + | 'LEFT_PAREN' + | 'MINUS' + | 'PLUS' + | 'QUESTION_MARK' + | 'RIGHT_BRACE' + | 'RIGHT_BRACKET' + | 'RIGHT_PAREN' + | 'SLASH' + | 'STAR' + + // One, two or three character tokens. + | 'AMPERSAND_AMPERSAND' + | 'NOT' + | 'DOLLAR_LEFT_BRACE' + | 'EQUAL' + | 'GREATER_EQUAL' + | 'GREATER' + | 'LESS_EQUAL' + | 'LESS' + | 'MINUS_EQUAL' + | 'MINUS_MINUS' + | 'PIPE_PIPE' + | 'PLUS_PLUS' + | 'PLUS_EQUAL' + | 'SLASH_EQUAL' + | 'STAR_EQUAL' + + // Literals + | 'IDENTIFIER' + | 'NUMBER' + | 'STRING' + | 'TEMPLATE_LITERAL_TEXT' + + // Keywords + | 'AND' + | 'CONST' + | 'DO' + | 'ELSE' + | 'FALSE' + | 'FOR' + | 'FUNCTION' + | 'IF' + | 'IN' + | 'LET' + | 'NULL' + | 'OF' + | 'OR' + | 'RETURN' + | 'REPEAT_UNTIL_GAME_OVER' + | 'TRUE' + | 'WHILE' + + // Grouping tokens + | 'EQUALITY' + | 'STRICT_EQUALITY' + | 'INEQUALITY' + | 'STRICT_INEQUALITY' + + // Invisible tokens + | 'EOL' // End of statement + | 'EOF' // End of file + +export type Token = { + type: TokenType + lexeme: string + literal: any + location: Location +} diff --git a/app/javascript/interpreter/languages/jikiscript/error.ts b/app/javascript/interpreter/languages/jikiscript/error.ts new file mode 100644 index 0000000000..6b4fa4b32f --- /dev/null +++ b/app/javascript/interpreter/languages/jikiscript/error.ts @@ -0,0 +1,66 @@ +export type SyntaxErrorType = + | 'UnknownCharacter' + | 'UnknownCharacterEquals' + | 'MissingCommaAfterParameters' + | 'MissingDoToStartBlock' + | 'MissingEndAfterBlock' + | 'MissingConditionAfterIf' + | 'MissingDoubleQuoteToStartString' + | 'MissingDoubleQuoteToTerminateString' + | 'MissingFieldNameOrIndexAfterLeftBracket' + | 'MissingRightParenthesisAfterExpression' + | 'MissingRightBraceToTerminatePlaceholder' + | 'MissingBacktickToTerminateTemplateLiteral' + | 'MissingExpression' + | 'InvalidAssignmentTarget' + | 'ExceededMaximumNumberOfParameters' + | 'MissingEndOfLine' + | 'MissingFunctionName' + | 'MissingLeftParenthesisAfterFunctionName' + | 'MissingLeftParenthesisAfterFunctionCall' + | 'MissingParameterName' + | 'MissingRightParenthesisAfterParameters' + | 'MissingLeftParenthesisAfterWhile' + | 'MissingRightParenthesisAfterWhileCondition' + | 'MissingWhileBeforeDoWhileCondition' + | 'MissingLeftParenthesisAfterDoWhile' + | 'MissingRightParenthesisAfterDoWhileCondition' + | 'MissingVariableName' + | 'InvalidNumericVariableName' + | 'MissingConstantName' + | 'MissingToAfterVariableNameToInitializeValue' + | 'MissingToAfterVariableNameToChangeValue' + | 'MissingLeftParenthesisBeforeIfCondition' + | 'MissingRightParenthesisAfterIfCondition' + | 'MissingDoToStartFunctionBody' + | 'MissingDoToStartFunctionBody' + | 'MissingDoToStartIfBody' + | 'MissingDoToStartElseBody' + | 'MissingDoAfterRepeatStatementCondition' + | 'MissingDoAfterWhileStatementCondition' + | 'MissingLeftParenthesisAfterForeach' + | 'MissingLetInForeachCondition' + | 'MissingElementNameAfterForeach' + | 'MissingOfAfterElementNameInForeach' + | 'MissingRightParenthesisAfterForeachElement' + | 'MissingRightBracketAfterFieldNameOrIndex' + | 'MissingRightParenthesisAfterFunctionCall' + | 'MissingRightParenthesisAfterExpression' + | 'MissingRightParenthesisAfterExpressionWithPotentialTypo' + | 'MissingRightBracketAfterListElements' + | 'MissingRightBraceAfterMapElements' + | 'MissingWithBeforeParameters' + | 'MissingStringAsKey' + | 'MissingColonAfterKey' + | 'MissingFieldNameOrIndexAfterOpeningBracket' + | 'InvalidTemplateLiteral' + | 'MissingColonAfterThenBranchOfTernaryOperator' + | 'NumberEndsWithDecimalPoint' + | 'NumberWithMultipleDecimalPoints' + | 'NumberContainsAlpha' + | 'NumberStartsWithZero' + | 'UnexpectedElseWithoutIf' + | 'UnexpectedLiteralExpressionAfterIf' + | 'UnexpectedVariableExpressionAfterIf' + | 'UnexpectedVariableExpressionAfterIfWithPotentialTypo' + | 'DuplicateParameterName' diff --git a/app/javascript/interpreter/languages/jikiscript/helpers/complexErrors.ts b/app/javascript/interpreter/languages/jikiscript/helpers/complexErrors.ts new file mode 100644 index 0000000000..f0903d0ac4 --- /dev/null +++ b/app/javascript/interpreter/languages/jikiscript/helpers/complexErrors.ts @@ -0,0 +1,39 @@ +import type { FunctionParameter } from '@/interpreter/statement' +import type { Token } from '../token' +import type { ErrorType } from '@/interpreter/error' + +export function errorForMissingDoAfterParameters( + token: Token, + parameters: FunctionParameter[] +): { errorType: ErrorType; context: {} } { + if (token.type == 'EOL') { + return { + errorType: 'MissingDoToStartBlock', + context: { + type: 'function', + }, + } + } + + if (token.type == 'IDENTIFIER') { + if (parameters.length == 0) { + return { + errorType: 'MissingWithBeforeParameters', + context: {}, + } + } else { + return { + errorType: 'MissingCommaBetweenParameters', + context: { + parameter: parameters[parameters.length - 1].name.lexeme, + }, + } + } + } + + return { + errorType: 'UnexpectedTokenAfterParameters', + context: {}, + } +} +// this.error("MissingCommaAfterParameter", , { parameter: parameters[-1].name }) diff --git a/app/javascript/interpreter/languages/jikiscript/helpers/isTypo.ts b/app/javascript/interpreter/languages/jikiscript/helpers/isTypo.ts new file mode 100644 index 0000000000..034dfb30df --- /dev/null +++ b/app/javascript/interpreter/languages/jikiscript/helpers/isTypo.ts @@ -0,0 +1,30 @@ +import { stringSimilarity } from 'string-similarity-js' +import type { Token } from '../token' +import type { Location } from '../../../location' + +export type TypoInfo = { + actual: string + potential: string + location: Location +} + +export function isTypo(token: Token): TypoInfo | undefined { + let intendedType: string | undefined + + if (isTypoOfEquals(token.lexeme)) { + intendedType = 'equals' + } + + if (intendedType === undefined) { + return undefined + } + return { + potential: intendedType, + actual: token.lexeme, + location: token.location, + } +} + +export function isTypoOfEquals(word: string): boolean { + return stringSimilarity(word, 'equals') > 0.8 +} diff --git a/app/javascript/interpreter/languages/jikiscript/parser.ts b/app/javascript/interpreter/languages/jikiscript/parser.ts new file mode 100644 index 0000000000..e9d4b79d49 --- /dev/null +++ b/app/javascript/interpreter/languages/jikiscript/parser.ts @@ -0,0 +1,884 @@ +import { SyntaxError } from '../../error' +import { type SyntaxErrorType } from './error' +import { + ArrayExpression, + AssignExpression, + BinaryExpression, + CallExpression, + Expression, + GroupingExpression, + LiteralExpression, + LogicalExpression, + DictionaryExpression, + UnaryExpression, + VariableExpression, + GetExpression, + SetExpression, + TemplateLiteralExpression, + TemplatePlaceholderExpression, + TemplateTextExpression, +} from '../../expression' +import type { LanguageFeatures } from '../../interpreter' +import { Location } from '../../location' +import { Scanner } from './scanner' +import { + BlockStatement, + ExpressionStatement, + ForeachStatement, + FunctionParameter, + FunctionStatement, + IfStatement, + RepeatStatement, + RepeatUntilGameOverStatement, + ReturnStatement, + Statement, + VariableStatement, + WhileStatement, +} from '../../statement' +import type { Token, TokenType } from './token' +import { translate } from '../../translator' +import { type Parser as GenericParser } from '../../interpreter' +import didYouMean from 'didyoumean' +import { isTypo } from './helpers/isTypo' +import { errorForMissingDoAfterParameters } from './helpers/complexErrors' + +export class Parser implements GenericParser { + private readonly scanner: Scanner + private current: number = 0 + private tokens: Token[] = [] + + constructor( + private functionNames: string[] = [], + languageFeatures: LanguageFeatures, + private shouldWrapTopLevelStatements: boolean + ) { + this.scanner = new Scanner(languageFeatures) + } + + public parse(sourceCode: string): Statement[] { + this.tokens = this.scanner.scanTokens(sourceCode) + + const statements = [] + + while (!this.isAtEnd()) { + const statement = this.declarationStatement() + if (statement) { + statements.push(statement) + } + } + + if (this.shouldWrapTopLevelStatements) + return this.wrapTopLevelStatements(statements) + + return statements + } + + wrapTopLevelStatements(statements: Statement[]): Statement[] { + const functionStmt = new FunctionStatement( + { + type: 'IDENTIFIER', + lexeme: 'main', + literal: null, + location: Location.unknown, + }, + [], + [], + Location.unknown + ) + + for (let i = statements.length - 1; i >= 0; i--) { + // Don't wrap top-level function statements + if (statements[i] instanceof FunctionStatement) continue + + functionStmt.body.unshift(statements[i]) + statements.splice(i, 1) + } + + statements.push(functionStmt) + return statements + } + + private declarationStatement(): Statement { + if (this.match('FUNCTION')) return this.functionStatement() + + return this.statement() + } + + private functionStatement(): Statement { + const name = this.consume('IDENTIFIER', 'MissingFunctionName') + const parameters: FunctionParameter[] = [] + if (this.match('WITH')) { + do { + if (parameters.length > 255) { + this.error( + 'ExceededMaximumNumberOfParameters', + this.peek().location, + { + maximum: 255, + actual: parameters.length, + name, + } + ) + } + + const parameterName = this.consume( + 'IDENTIFIER', + 'MissingParameterName', + { + name: name, + } + ) + + if (parameters.find((p) => p.name.lexeme == parameterName.lexeme)) { + this.error('DuplicateParameterName', this.previous().location, { + parameter: parameterName.lexeme, + }) + } + + parameters.push(new FunctionParameter(parameterName, null)) + } while (this.match('COMMA')) + } + if (this.peek().type != 'DO') { + const { errorType, context } = errorForMissingDoAfterParameters( + this.peek(), + parameters + ) + this.error(errorType, this.peek().location, context) + } + this.consume('DO', 'MissingDoToStartBlock', { type: 'function', name }) + this.consumeEndOfLine() + + const body = this.block('function') + this.functionNames.push(name.lexeme) + return new FunctionStatement( + name, + parameters, + body, + Location.between(name, this.previous()) + ) + } + + private statement(): Statement { + if (this.match('SET')) return this.setStatement() + if (this.match('IF')) return this.ifStatement() + if (this.match('RETURN')) return this.returnStatement() + if (this.match('REPEAT')) return this.repeatStatement() + if (this.match('REPEAT_UNTIL_GAME_OVER')) + return this.repeatUntilGameOverStatement() + if (this.match('WHILE')) return this.whileStatement() + if (this.match('FOREACH')) return this.foreachStatement() + if (this.match('DO')) return this.blockStatement('do') + + // Error cases + if (this.match('ELSE')) { + this.error('UnexpectedElseWithoutIf', this.previous().location) + } + + return this.expressionStatement() + } + + private setStatement(): Statement { + const setToken = this.previous() + if (this.peek(2).type == 'LEFT_BRACKET') { + const assignment = this.assignment() + this.consumeEndOfLine() + + return new ExpressionStatement( + assignment, + Location.between(setToken, assignment) + ) + } else { + let name + try { + name = this.consume('IDENTIFIER', 'MissingVariableName') + } catch (e) { + const nameLexeme = this.peek().lexeme + if (nameLexeme.match(/[0-9]/)) { + this.error('InvalidNumericVariableName', this.peek().location, { + name: nameLexeme, + }) + } else { + throw e + } + } + + this.consume('TO', 'MissingToAfterVariableNameToInitializeValue', { + name, + }) + + const initializer = this.expression() + this.consumeEndOfLine() + + return new VariableStatement( + name, + initializer, + Location.between(setToken, initializer) + ) + } + } + + private ifStatement(): Statement { + const ifToken = this.previous() + let condition + try { + condition = this.expression() + if (condition instanceof LiteralExpression) { + this.error('UnexpectedLiteralExpressionAfterIf', ifToken.location) + } + if (condition instanceof VariableExpression) { + const typoData = isTypo(this.peek()) + if (typoData) { + this.error( + 'UnexpectedVariableExpressionAfterIfWithPotentialTypo', + ifToken.location, + { actual: typoData.actual, potential: typoData.potential } + ) + } + + this.error('UnexpectedVariableExpressionAfterIf', ifToken.location) + } + // console.log("condition", condition); + } catch (e) { + if (e instanceof SyntaxError && e.type == 'MissingExpression') { + this.error('MissingConditionAfterIf', ifToken.location) + } else { + throw e + } + } + + this.consume('DO', 'MissingDoToStartBlock', { type: 'if' }) + const thenBranch = this.blockStatement('if', { allowElse: true }) + let elseBranch = null + + if (this.match('ELSE')) { + if (this.match('IF')) { + elseBranch = this.ifStatement() + } else { + this.consume('DO', 'MissingDoToStartBlock', { type: 'else' }) + elseBranch = this.blockStatement('else') + } + } else { + // this.consume("END", "MissingEndAfterIfBody"); + // this.consumeEndOfLine(); + } + + return new IfStatement( + condition, + thenBranch, + elseBranch, + Location.between(ifToken, this.previous()) + ) + } + + private returnStatement(): Statement { + const keyword = this.previous() + const value: Expression | null = this.isAtEndOfStatement() + ? null + : this.expression() + + this.consumeEndOfLine() + + return new ReturnStatement( + keyword, + value, + Location.between(keyword, value || keyword) + ) + } + + private repeatStatement(): Statement { + const begin = this.previous() + const condition = this.expression() + + this.consume('DO', 'MissingDoToStartBlock', { type: 'repeat' }) + this.consumeEndOfLine() + + const statements = this.block('repeat') + + return new RepeatStatement( + condition, + statements, + Location.between(begin, this.previous()) + ) + } + + private repeatUntilGameOverStatement(): Statement { + const begin = this.previous() + + this.consume('DO', 'MissingDoToStartBlock', { + type: 'repeat_until_game_over', + }) + this.consumeEndOfLine() + + const statements = this.block('repeat_until_game_over') + + return new RepeatUntilGameOverStatement( + statements, + Location.between(begin, this.previous()) + ) + } + + private whileStatement(): Statement { + const begin = this.previous() + const condition = this.expression() + + this.consume('DO', 'MissingDoToStartBlock', { type: 'while' }) + this.consumeEndOfLine() + + const statements = this.block('while') + + return new WhileStatement( + condition, + statements, + Location.between(begin, this.previous()) + ) + } + + private foreachStatement(): Statement { + const foreachToken = this.previous() + const elementName = this.consume( + 'IDENTIFIER', + 'MissingElementNameAfterForeach' + ) + this.consume('IN', 'MissingOfAfterElementNameInForeach', { + elementName, + }) + const iterable = this.expression() + + this.consume('DO', 'MissingDoToStartBlock', { type: 'foreach' }) + this.consumeEndOfLine() + + const statements = this.block('foreach') + + return new ForeachStatement( + elementName, + iterable, + statements, + Location.between(foreachToken, this.previous()) + ) + } + + private blockStatement( + type: string, + { allowElse } = { allowElse: false } + ): BlockStatement { + const doToken = this.previous() + this.consumeEndOfLine() + const statements = this.block(type, { allowElse: allowElse }) + + return new BlockStatement( + statements, + Location.between(doToken, this.previous()) + ) + } + + private block( + type: string, + { allowElse } = { allowElse: false } + ): Statement[] { + const statements: Statement[] = [] + + while ( + !this.check('END') && + (!allowElse || !this.check('ELSE')) && + !this.isAtEnd() + ) { + statements.push(this.statement()) + } + + if (!allowElse || this.peek().type != 'ELSE') { + this.consume('END', 'MissingEndAfterBlock', { type }) + this.consumeEndOfLine() + } + return statements + } + + private expressionStatement(): Statement { + const expression = this.expression() + this.consumeEndOfLine() + + return new ExpressionStatement(expression, expression.location) + } + + private expression(): Expression { + return this.assignment() + } + + private assignment(): Expression { + const expr = this.or() + + if (this.match('TO')) { + const operator = this.previous() + const value = this.assignment() + + if (expr instanceof VariableExpression) { + return new AssignExpression( + expr.name, + operator, + value, + Location.between(expr, value) + ) + } + + if (expr instanceof GetExpression) { + return new SetExpression( + expr.obj, + expr.field, + value, + Location.between(expr, value) + ) + } + + this.error('InvalidAssignmentTarget', expr.location, { + assignmentTarget: expr, + }) + } + + return expr + } + + private or(): Expression { + const expr = this.and() + + while (this.match('OR')) { + let operator = this.previous() + operator.type = 'OR' + const right = this.and() + return new LogicalExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private and(): Expression { + const expr = this.equality() + + while (this.match('AND')) { + let operator = this.previous() + operator.type = 'AND' + const right = this.equality() + return new LogicalExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private equality(): Expression { + let expr = this.comparison() + + while (this.match('STRICT_EQUALITY')) { + let operator = this.previous() + const right = this.comparison() + expr = new BinaryExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private comparison(): Expression { + let expr = this.term() + + while (this.match('GREATER', 'GREATER_EQUAL', 'LESS', 'LESS_EQUAL')) { + const operator = this.previous() + const right = this.term() + expr = new BinaryExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private term(): Expression { + let expr = this.factor() + + while (this.match('MINUS', 'PLUS')) { + const operator = this.previous() + const right = this.factor() + expr = new BinaryExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private factor(): Expression { + let expr = this.unary() + + while (this.match('SLASH', 'STAR', 'PERCENT')) { + const operator = this.previous() + const right = this.unary() + expr = new BinaryExpression( + expr, + operator, + right, + Location.between(expr, right) + ) + } + + return expr + } + + private unary(): Expression { + if (this.match('NOT', 'MINUS')) { + const operator = this.previous() + const right = this.unary() + return new UnaryExpression( + operator, + right, + Location.between(operator, right) + ) + } + + return this.call() + } + + private call(): Expression { + let expression = this.primary() + + while (true) { + if (this.match('LEFT_PAREN')) { + expression = this.finishCall(expression) + } else if (this.match('LEFT_BRACKET')) { + const leftBracket = this.previous() + if (!this.match('STRING', 'NUMBER')) + this.error( + 'MissingFieldNameOrIndexAfterLeftBracket', + leftBracket.location, + { + expression, + } + ) + + const name = this.previous() + const rightBracket = this.consume( + 'RIGHT_BRACKET', + 'MissingRightBracketAfterFieldNameOrIndex', + { expression, name } + ) + expression = new GetExpression( + expression, + name, + Location.between(expression, rightBracket) + ) + } else { + if ( + expression instanceof VariableExpression && + this.functionNames.includes(expression.name.lexeme) && + this.match('RIGHT_PAREN') + ) + this.error( + 'MissingLeftParenthesisAfterFunctionCall', + this.previous().location, + { expression, function: expression.name.lexeme } + ) + break + } + } + + return expression + } + + private finishCall(callee: Expression): Expression { + const args: Expression[] = [] + + if (this.match('EOL')) { + this.error('MissingRightParenthesisAfterFunctionCall', callee.location, { + function: + callee instanceof VariableExpression ? callee.name.lexeme : null, + }) + } + if (!this.check('RIGHT_PAREN')) { + do { + args.push(this.expression()) + } while (this.match('COMMA')) + } + + const paren = this.consume( + 'RIGHT_PAREN', + 'MissingRightParenthesisAfterFunctionCall', + { + args, + function: + callee instanceof VariableExpression ? callee.name.lexeme : null, + } + ) + return new CallExpression( + callee, + paren, + args, + Location.between(callee, paren) + ) + } + + private primary(): Expression { + if (this.match('LEFT_BRACKET')) return this.array() + + if (this.match('LEFT_BRACE')) return this.dictionary() + + if (this.match('FALSE')) + return new LiteralExpression(false, this.previous().location) + + if (this.match('TRUE')) + return new LiteralExpression(true, this.previous().location) + + if (this.match('NULL')) + return new LiteralExpression(null, this.previous().location) + + if (this.match('NUMBER', 'STRING')) + return new LiteralExpression( + this.previous().literal, + this.previous().location + ) + + if (this.match('IDENTIFIER')) + return new VariableExpression(this.previous(), this.previous().location) + + if (this.match('BACKTICK')) return this.templateLiteral() + + if (this.match('LEFT_PAREN')) { + const lparen = this.previous() + const expression = this.expression() + + // TODO: If there's not a right paren here, + + let rparen + try { + rparen = this.consume( + 'RIGHT_PAREN', + 'MissingRightParenthesisAfterExpression', + { + expression, + } + ) + } catch (e) { + // TODO: If there's not a right paren here, we could consider what's + // happened instead. Maybe the person made a typo on the next character + // For example, did they put "equal" instead of "equals"? + const typoData = isTypo(this.peek()) + if (typoData) { + this.error( + 'MissingRightParenthesisAfterExpressionWithPotentialTypo', + typoData.location, + { actual: typoData.actual, potential: typoData.potential } + ) + } + + throw e + } + + return new GroupingExpression( + expression, + Location.between(lparen, rparen) + ) + } + + this.error('MissingExpression', this.peek().location) + } + + private templateLiteral(): Expression { + const openBacktick = this.previous() + const parts: Expression[] = [] + + while (this.peek().type != 'BACKTICK') { + if (this.match('DOLLAR_LEFT_BRACE')) { + const dollarLeftBrace = this.previous() + const expr = this.expression() + const rightBrace = this.consume( + 'RIGHT_BRACE', + 'MissingRightBraceToTerminatePlaceholder', + { expr } + ) + parts.push( + new TemplatePlaceholderExpression( + expr, + Location.between(dollarLeftBrace, rightBrace) + ) + ) + } else { + const textToken = this.consume( + 'TEMPLATE_LITERAL_TEXT', + 'InvalidTemplateLiteral' + ) + parts.push(new TemplateTextExpression(textToken, textToken.location)) + } + } + + const closeBacktick = this.consume( + 'BACKTICK', + 'MissingBacktickToTerminateTemplateLiteral', + { elements: parts } + ) + return new TemplateLiteralExpression( + parts, + Location.between(openBacktick, closeBacktick) + ) + } + + private array(): Expression { + const leftBracket = this.previous() + const elements: Expression[] = [] + + if (!this.check('RIGHT_BRACKET')) { + do { + elements.push(this.or()) + } while (this.match('COMMA')) + } + + const rightBracket = this.consume( + 'RIGHT_BRACKET', + 'MissingRightBracketAfterListElements', + { elements } + ) + return new ArrayExpression( + elements, + Location.between(leftBracket, rightBracket) + ) + } + + private dictionary(): Expression { + const leftBrace = this.previous() + const elements = new Map() + + if (!this.check('RIGHT_BRACE')) { + do { + const key = this.consume('STRING', 'MissingStringAsKey') + this.consume('COLON', 'MissingColonAfterKey') + elements.set(key.literal, this.primary()) + } while (this.match('COMMA')) + } + + const rightBracket = this.consume( + 'RIGHT_BRACE', + 'MissingRightBraceAfterMapElements', + { elements } + ) + return new DictionaryExpression( + elements, + Location.between(leftBrace, rightBracket) + ) + } + + private match(...tokenTypes: TokenType[]): boolean { + for (const tokenType of tokenTypes) { + if (this.check(tokenType)) { + this.advance() + return true + } + } + return false + } + + private check(tokenType: TokenType): boolean { + if (this.isAtEnd()) return false + return this.peek().type == tokenType + } + + private advance(): Token { + if (!this.isAtEnd()) this.current++ + return this.previous() + } + + private consume( + tokenType: TokenType, + type: SyntaxErrorType, + context?: any + ): Token { + if (this.check(tokenType)) return this.advance() + + this.error(type, this.peek().location, context) + } + + private consumeEndOfLine(): void { + if (this.match('EOL')) { + return + } + + // We're now at an error point where the next character + // should be an EOL but isn't. We provide contextual guidance + + const type = this.peek().type + const previous = this.previous().lexeme + const current = this.peek().lexeme + let suggestion + + if (type == 'FUNCTION') { + suggestion = 'Did you mean to start a function on a new line?' + } else { + suggestion = 'Did you make a typo?' + } + this.error('MissingEndOfLine', this.peek().location, { + previous, + current, + suggestion, + }) + } + + private error( + type: SyntaxErrorType, + location: Location, + context?: any + ): never { + throw new SyntaxError( + translate(`error.syntax.${type}`, context), + location, + type, + context + ) + } + + private isAtEnd(): boolean { + return this.peek().type == 'EOF' + } + + private isAtEndOfStatement(): boolean { + return this.peek().type == 'EOL' || this.isAtEnd() + } + + private peek(n = 1): Token { + return this.tokens[this.current + (n - 1)] + } + + private previous(): Token { + return this.tokens[this.current - 1] + } +} +export function parse( + sourceCode: string, + { + functionNames = [], + languageFeatures = {}, + shouldWrapTopLevelStatements = false, + }: { + functionNames?: string[] + languageFeatures?: LanguageFeatures + shouldWrapTopLevelStatements?: boolean + } = {} +): Statement[] { + return new Parser( + functionNames, + languageFeatures, + shouldWrapTopLevelStatements + ).parse(sourceCode) +} diff --git a/app/javascript/interpreter/languages/jikiscript/scanner.ts b/app/javascript/interpreter/languages/jikiscript/scanner.ts new file mode 100644 index 0000000000..af750efbf9 --- /dev/null +++ b/app/javascript/interpreter/languages/jikiscript/scanner.ts @@ -0,0 +1,507 @@ +/* + * The scanner is the first part of the interpreter. + * It takes the source code as input and produces a list of tokens, that + * represent the different conceptual elements of the source code. For example, + * it takes a whole string and reduces it into a STRING token, and it takes an + * equals sign and turns it into an EQUAL token. + * + * These tokens will then be used by the parser to build a tree of expressions, + * which will be used by the interpreter to execute the program. + * + * The main workflow here is looking at the next character in the source code, + * and then deciding what to do with it. Sometimes we just immediate "consume" it + * (turn it into a token), but other times we need to peak ahead and see what comes + * next to know what token to produce or how to handle it. + * + * This process will also produce errors if the source code is invalid, for example + * if we see an unterminated string, or a number with multiple decimal points. + */ +import { + DisabledLanguageFeatureError, + type DisabledLanguageFeatureErrorType, + SyntaxError, +} from '../../error' +import { type SyntaxErrorType } from './error' +import type { Token, TokenType } from './token' +import { Location } from '../../location' +import type { LanguageFeatures } from '../../interpreter' +import { translate } from '../../translator' + +export class Scanner { + private tokens: Token[] = [] + private start: number = 0 + private current: number = 0 + private line: number = 1 + private lineOffset: number = 0 + private sourceCode: string = '' + + private static readonly keywords: Record = { + and: 'AND', + do: 'DO', + else: 'ELSE', + end: 'END', + false: 'FALSE', + for: 'FOR', + foreach: 'FOREACH', + function: 'FUNCTION', + if: 'IF', + in: 'IN', + is: 'STRICT_EQUALITY', + not: 'NOT', + null: 'NULL', + or: 'OR', + repeat: 'REPEAT', + repeat_until_game_over: 'REPEAT_UNTIL_GAME_OVER', + return: 'RETURN', + set: 'SET', + to: 'TO', + true: 'TRUE', + while: 'WHILE', + with: 'WITH', + } + + private readonly tokenizers: Record = { + '(': this.tokenizeLeftParanthesis, + ')': this.tokenizeRightParanthesis, + '{': this.tokenizeLeftBrace, + '}': this.tokenizeRightBrace, + '[': this.tokenizeLeftBracket, + ']': this.tokenizeRightBracket, + ':': this.tokenizeColon, + ',': this.tokenizeComma, + '+': this.tokenizePlus, + '-': this.tokenizeMinus, + '*': this.tokenizeStar, + '/': this.tokenizeSlash, + '%': this.tokenizePercent, + '>': this.tokenizeGreater, + '<': this.tokenizeLess, + ' ': this.tokenizeWhitespace, + '\t': this.tokenizeWhitespace, + '\r': this.tokenizeWhitespace, + '\n': this.tokenizeNewline, + '"': this.tokenizeString, + '`': this.tokenizeTemplateLiteral, + } + + constructor(private languageFeatures: LanguageFeatures = {}) {} + + scanTokens(sourceCode: string): Token[] { + this.sourceCode = sourceCode + this.reset() + + while (!this.isAtEnd()) { + this.start = this.current + this.scanToken() + } + + // Add synthetic EOL token to simplify parsing + if (this.shouldAddEOLToken()) this.addSyntheticToken('EOL', '\n') + + // Add synthetic EOF token to simplify parsing + this.addSyntheticToken('EOF', '\0') + + return this.tokens + } + + private scanToken(): void { + const c = this.advance() + + const tokenizer = this.tokenizers[c] + if (tokenizer) { + tokenizer.bind(this)() + } else { + if (this.isDigit(c)) { + this.tokenizeNumber() + } else if (this.isAlpha(c)) { + this.tokenizeIdentifier() + } else { + if (c == '=') { + this.error('UnknownCharacterEquals') + } + + this.error('UnknownCharacter', { + character: c, + }) + } + } + } + + /** + * These are tokenizers. The purpose of a tokenizer is to consume characters from the source code + * and produce a token. The token is then added to the list of tokens. + * + * For example, if we see a left paranthesis, we add a token of type "LEFT_PAREN" to the list of tokens. + * + * Some tokens are more complex. For example if we see an equals sign, we need to check if the next character + * is also an equals sign. If it is, we add a token of type "EQUAL_EQUAL" to the list of tokens. If it is not, + * we add a token of type "EQUAL" to the list of tokens. + * + * Some are even more complex. For example, if we see a double quote, we need to consume characters until we see + * another double quote. We then add a token of type "STRING" to the list of tokens + * with all the characters between the double quotes consumed. + */ + + /* This first set of tokenizers are simple. They consume a single character and add a token to the list of tokens, + * or do simple checks for the next characters (e.g. "++") + */ + private tokenizeLeftParanthesis() { + this.addToken('LEFT_PAREN') + } + private tokenizeRightParanthesis() { + this.addToken('RIGHT_PAREN') + } + private tokenizeLeftBrace() { + this.addToken('LEFT_BRACE') + } + private tokenizeRightBrace() { + this.addToken('RIGHT_BRACE') + } + private tokenizeLeftBracket() { + this.addToken('LEFT_BRACKET') + } + private tokenizeRightBracket() { + this.addToken('RIGHT_BRACKET') + } + private tokenizeColon() { + this.addToken('COLON') + } + private tokenizeComma() { + this.addToken('COMMA') + } + private tokenizePlus() { + this.addToken('PLUS') + } + private tokenizeMinus() { + this.addToken('MINUS') + } + private tokenizeStar() { + this.addToken('STAR') + } + private tokenizeSlash() { + if (this.peek() == '/') { + this.tokenizeComment() + } else { + this.addToken('SLASH') + } + } + private tokenizePercent() { + this.addToken('PERCENT') + } + private tokenizeGreater() { + this.addToken(this.match('=') ? 'GREATER_EQUAL' : 'GREATER') + } + private tokenizeLess() { + this.addToken(this.match('=') ? 'LESS_EQUAL' : 'LESS') + } + + /* + * We don't tokenize whitespace, but we do need to match on it + */ + private tokenizeWhitespace() { + return + } + + /* + * The new line tokenizer not only adds a token, but also increments the line number + * and resets the line offset to the next character. + */ + private tokenizeNewline() { + if (this.shouldAddEOLToken()) this.addToken('EOL') + + this.line++ + this.lineOffset = this.current + } + + private tokenizeComment(): void { + // Consume until the end of the line + while (this.isAnotherCharacter()) { + this.advance() + } + } + + private tokenizeString(): void { + // Keep consuming characters until we see another double quote + // and then stop before we consume it. + while (this.peek() != '"' && this.isAnotherCharacter()) this.advance() + + // If we reach the end of the line, we have an unterminated string + if (this.peek() != '"') + if (this.previouslyAddedToken() == 'IDENTIFIER') + this.error('MissingDoubleQuoteToStartString', { + string: this.tokens[this.tokens.length - 1].lexeme, + }) + else + this.error('MissingDoubleQuoteToTerminateString', { + string: this.sourceCode.substring(this.start + 1, this.current), + }) + + // Consume the closing quotation mark + this.advance() + + // Finally add the token, with its value set to the characters between the quotes + this.addToken( + 'STRING', + this.sourceCode.substring(this.start + 1, this.current - 1) + ) + } + + // TODO: Check whether this errors correctly if split over lines + private tokenizeTemplateLiteral(): void { + this.addToken('BACKTICK') + + while (this.peek() != '`' && this.isAnotherCharacter()) { + this.start = this.current + + if (this.peek() != '$' && this.peekNext() != '{' && !this.isAtEnd()) { + while ( + this.peek() != '$' && + this.peek() != '`' && + this.peekNext() != '{' && + !this.isAtEnd() + ) + this.advance() + + this.addToken( + 'TEMPLATE_LITERAL_TEXT', + this.sourceCode.substring(this.start, this.current) + ) + } else { + this.advance() // Consume the $ + this.advance() // Consume the { + this.addToken('DOLLAR_LEFT_BRACE') + this.start = this.current + + while (this.peek() != '}' && !this.isAtEnd()) { + this.start = this.current + this.scanToken() + } + + if (this.isAtEnd()) + this.error('MissingRightBraceToTerminatePlaceholder') + + this.start = this.current + this.advance() + this.addToken('RIGHT_BRACE') // Consume the } + } + } + + if (this.isAtEnd()) this.error('MissingBacktickToTerminateTemplateLiteral') + + this.start = this.current + this.advance() + this.addToken('BACKTICK') // Consume the closing ` + } + + /* + * For numbers, we consume any digits and a single decimal point, if present. + * We then add a token with the value of the number. + */ + private tokenizeNumber(): void { + while (this.isDigit(this.peek()) || this.peek() == '.') this.advance() + const number = this.sourceCode.substring(this.start, this.current) + + // Guard against numbers starting with 0 + if ( + number.startsWith('0') && + number.length > 1 && + !number.startsWith('0.') + ) { + this.error('NumberStartsWithZero', { + suggestion: parseFloat(number), + }) + } + + // Guard against numbers with invalid characters (e.g. "123abc") + if (this.peek().match('[a-zA-Z]')) { + this.error('NumberContainsAlpha', { + suggestion: parseFloat(number), + }) + } + // Guard against trailing decimal points (e.g. "1.") + if (number.endsWith('.')) { + this.error('NumberEndsWithDecimalPoint', { + suggestion: parseInt(number), + }) + } + + // Guard against numbers with multiple decimal points (e.g. "1.2.4") + if (number.split('.').length > 2) { + const parts = number.split('.') + const suggestion = parts[0] + '.' + parts.slice(1).join('') + this.error('NumberWithMultipleDecimalPoints', { + suggestion: suggestion, + }) + } + + this.addToken('NUMBER', Number.parseFloat(number)) + } + + private tokenForLexeme(lexeme: string): string { + if (lexeme == 'is') { + return 'STRICT_EQUALITY' + } + if (lexeme == 'equals') { + return 'STRICT_EQUALITY' + } + + return Scanner.keywords[this.lexeme()] + } + + private tokenizeIdentifier(): void { + while (this.isAlphaNumeric(this.peek())) this.advance() + + const keywordType = this.tokenForLexeme(this.lexeme()) + if (keywordType) return this.addToken(keywordType) + + this.addToken('IDENTIFIER') + } + + private addSyntheticToken(type: TokenType, lexeme: string): void { + this.tokens.push({ + type, + lexeme: lexeme, + literal: null, + location: this.location(), + }) + } + + private addToken(type: TokenType, literal: any = null): void { + this.verifyEnabled(type) + + this.tokens.push({ + type, + lexeme: this.lexeme(), + literal, + location: this.location(), + }) + } + + private isAlpha(c: string): boolean { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' + } + + private isDigit(c: string): boolean { + return c >= '0' && c <= '9' + } + + private isAlphaNumeric(c: string): boolean { + return this.isAlpha(c) || this.isDigit(c) + } + + private isAtEnd(): boolean { + return this.current >= this.sourceCode.length + } + + private isAnotherCharacter(): boolean { + const next = this.peek() + if (next == '\n') return false + if (next == '\0') return false + return true + } + + private shouldAddEOLToken(): boolean { + return ( + this.previouslyAddedToken() != null && + this.previouslyAddedToken() != 'EOL' + ) + } + + private advance(): string { + return this.sourceCode[this.current++] + } + + private peek(): string { + if (this.isAtEnd()) return '\0' + return this.sourceCode[this.current] + } + + private peekNext(): string { + if (this.current + 1 >= this.sourceCode.length) return '\0' + return this.sourceCode[this.current + 1] + } + + private previouslyAddedToken(): TokenType | null { + if (this.tokens.length === 0) return null + return this.tokens[this.tokens.length - 1].type + } + + private match(expected: string): boolean { + if (this.isAtEnd()) return false + if (this.sourceCode[this.current] != expected) return false + + this.current++ + return true + } + + private lexeme(): string { + return this.sourceCode.substring(this.start, this.current) + } + + private location(): Location { + return Location.fromLineOffset( + this.start + 1, + this.current + 1, + this.line, + this.lineOffset + ) + } + + private reset() { + this.tokens = [] + this.start = 0 + this.current = 0 + this.line = 1 + this.lineOffset = 0 + } + + private verifyEnabled(tokenType: TokenType): void { + if (!this.languageFeatures) return + + if ( + this.languageFeatures.ExcludeList && + this.languageFeatures.ExcludeList.includes(tokenType) + ) + this.disabledLanguageFeatureError('ExcludeListViolation', { + ExcludeList: this.languageFeatures.ExcludeList, + tokenType, + }) + + if ( + this.languageFeatures.IncludeList && + !this.languageFeatures.IncludeList.includes(tokenType) + ) + this.disabledLanguageFeatureError('IncludeListViolation', { + IncludeList: this.languageFeatures.IncludeList, + tokenType, + }) + } + + private error(type: SyntaxErrorType, context: any = {}): never { + throw new SyntaxError( + translate(`error.syntax.${type}`, context), + this.location(), + type, + context + ) + } + + private disabledLanguageFeatureError( + type: DisabledLanguageFeatureErrorType, + context: any + ): never { + throw new DisabledLanguageFeatureError( + translate(`error.disabledLanguageFeature.${type}`, context), + this.location(), + type, + context + ) + } +} + +export function scan( + sourceCode: string, + ...args: [LanguageFeatures?] +): Token[] { + return new Scanner(...args).scanTokens(sourceCode) +} diff --git a/app/javascript/interpreter/languages/jikiscript/token.ts b/app/javascript/interpreter/languages/jikiscript/token.ts new file mode 100644 index 0000000000..5b15f10953 --- /dev/null +++ b/app/javascript/interpreter/languages/jikiscript/token.ts @@ -0,0 +1,71 @@ +import { Location } from '../../location' + +export type TokenType = + // Single-character tokens + | 'BACKTICK' + | 'COLON' + | 'COMMA' + | 'LEFT_BRACE' + | 'LEFT_BRACKET' + | 'LEFT_PAREN' + | 'MINUS' + | 'PERCENT' + | 'PLUS' + | 'QUESTION_MARK' + | 'RIGHT_BRACE' + | 'RIGHT_BRACKET' + | 'RIGHT_PAREN' + | 'SLASH' + | 'STAR' + + // One, two or three character tokens. + | 'NOT' + | 'DOLLAR_LEFT_BRACE' + | 'GREATER_EQUAL' + | 'GREATER' + | 'LESS_EQUAL' + | 'LESS' + + // Literals + | 'IDENTIFIER' + | 'NUMBER' + | 'STRING' + | 'TEMPLATE_LITERAL_TEXT' + + // Keywords + | 'AND' + | 'DO' + | 'ELSE' + | 'END' + | 'FALSE' + | 'FOR' + | 'FOREACH' + | 'FUNCTION' + | 'IF' + | 'IN' + | 'NULL' + | 'IN' + | 'OR' + | 'REPEAT' + | 'REPEAT_UNTIL_GAME_OVER' + | 'RETURN' + | 'SET' + | 'TO' + | 'TRUE' + | 'WHILE' + | 'WITH' + + // Grouping tokens + | 'STRICT_EQUALITY' + | 'STRICT_INEQUALITY' + + // Invisible tokens + | 'EOL' // End of statement + | 'EOF' // End of file + +export type Token = { + type: TokenType + lexeme: string + literal: any + location: Location +} diff --git a/app/javascript/interpreter/locales/en/translation.json b/app/javascript/interpreter/locales/en/translation.json new file mode 100644 index 0000000000..1895432fe2 --- /dev/null +++ b/app/javascript/interpreter/locales/en/translation.json @@ -0,0 +1,95 @@ +{ + "error": { + "syntax": { + "ExceededMaximumNumberOfParameters": "Sorry you can't have more than 255 parameters.", + "InvalidAssignmentTarget": "Invalid assignment target.", + "InvalidNumericVariableName": "Invalid variable name \"{{name}}\". Variable names cannot start with a number.", + "InvalidTemplateLiteral": "Invalid template literal.", + "MissingBacktickToTerminateTemplateLiteral": "Missing backtick ('`') to terminate template literal.", + "MissingConditionAfterIf": "Did you forget to add a condition to your if statement?", + "MissingCommaBetweenParameters": "Did you forget to add a command after the `{{parameter}}` parameter?", + "MissingColonAfterThenBranchOfTernaryOperator": "Expect ':' after then branch of ternary operator.", + "MissingConstantName": "Expect constant name.", + "MissingDoToStartBlock": "Are you missing a `do` to start the {{type}} body?", + "MissingDoubleQuoteToStartString": "Did you forget the start quote for the \"{{string}}\" string?", + "MissingDoubleQuoteToTerminateString": "Did you forget the end quote for the \"{{string}}\" string?", + "MissingEndAfterBlock": "Are you missing an `end` to finish the {{type}} body?", + "MissingEndOfLine": "We didn't expect `{{current}}` to appear on this line after the `{{previous}}`. {{suggestion}}", + "MissingExpression": "Expect expression.", + "MissingFieldNameOrIndexAfterLeftBracket": "Expect field name or index after '['.", + "MissingFunctionName": "Did you forget to give your function a name?", + "MissingLeftBraceToStartBody": "Expected '{' to start {{type}} body.", + "MissingLeftBraceToStartForeachBody": "Expected '{' to start 'foreach' body", + "MissingLeftParenthesisAfterForeach": "Expected '(' after 'foreach'", + "MissingLeftParenthesisAfterFunctionCall": "Did you forget the start parenthesis when trying to call the {{function}} function?", + "MissingLeftParenthesisAfterFunctionName": "Expect '(' after function name.", + "MissingLeftParenthesisBeforeIfCondition": "Expect '(' before if condition.", + "MissingLeftParenthesisAfterWhile": "Expected '(' after 'while'", + "MissingLetInForeachCondition": "Expected 'let' in foreach condition", + "MissingOfAfterElementNameInForeach": "Expected 'of' after element name in 'foreach'.", + "MissingParameterName": "Did you forget to add a parameter after `with`?", + "MissingRightBraceAfterBlock": "Expect '}' after block.", + "MissingRightBraceAfterMapElements": "Expect '}' after map elements.", + "MissingRightBraceToTerminatePlaceholder": "Missing right brace ('}') to terminate placeholder.", + "MissingRightBracketAfterFieldNameOrIndex": "Expect ']' after field name or index", + "MissingRightBracketAfterListElements": "Expect ']' after list elements.", + "MissingRightParenthesisAfterFunctionCall": "Did you forget the end parenthesis when trying to call the {{function}} function?", + "MissingRightParenthesisAfterDoWhileCondition": "Expected ')' after 'do/while' condition", + "MissingRightParenthesisAfterExpression": "Expect ')' after expression.", + "MissingRightParenthesisAfterExpressionWithPotentialTypo": "Do you have a typo here? Did you mean `{{potential}}` instead of `{{actual}}`?", + "MissingRightParenthesisAfterForeachElement": "Expected ')' after 'foreach' element", + "MissingRightParenthesisAfterIfCondition": "Expect ')' after if condition.", + "MissingRightParenthesisAfterParameters": "Expect ')' after parameters.", + "MissingRightParenthesisAfterWhileCondition": "Expected ')' after 'while' condition", + "MissingWithBeforeParameters": "Did you forget the `with` keyword before your parameters?", + "MissingStringAsKey": "Expect string as key.", + "MissingVariableName": "Expect variable name.", + "DuplicateParameterName": "Did you accidently use the name `{{parameter}}` twice in your function parameters.", + "MissingWhileBeforeDoWhileCondition": "Expected 'while' to start 'while' condition", + "NumberContainsAlpha": "A number cannot contain letters. Did you mean `{{suggestion}}`?", + "NumberEndsWithDecimalPoint": "A number cannot end with a decimal point. Did you mean `{{suggestion}}`?", + "NumberStartsWithZero": "A number cannot start with a zero. Did you mean `{{suggestion}}`?", + "NumberWithMultipleDecimalPoints": "A number can only have one decimal point. Did you mean `{{suggestion}}`?", + "UnknownCharacter": "Unknown character: '{{character}}'.", + "UnknownCharacterEquals": "We don't use the equals sign ('=') in JikiScript. Use `to` in set statements or `equals` in comparisons", + "UnexpectedElseWithoutIf": "We can't work out which if statement this `else` belongs to. Did you forget to add an `if` statement before this `else`?", + "UnexpectedLiteralExpressionAfterIf": "Did you forget to compare to things? In JikiScript the comparison (`is`, `equals`, `>`, etc are always required).", + "UnexpectedVariableExpressionAfterIf": "Did you forget to compare to things? In JikiScript the comparison (`is`, `equals`, `>`, etc are always required).", + "UnexpectedVariableExpressionAfterIfWithPotentialTypo": "We were expecting some sort of comparison here. Did you mean to type `{{potential}}` instead of `{{actual}}`?" + }, + "semantic": { + "CannotAssignToConstant": "Cannot re-assign value of constant.", + "DuplicateVariableName": "Already a variable with this name in this scope.", + "InvalidPostfixOperand": "Invalid left-hand side for update expression.", + "TopLevelReturn": "Can't return from top-level code.", + "VariableUsedInOwnInitializer": "Can't read local variable in its own initializer" + }, + "runtime": { + "CouldNotEvaluateFunction": "Could not evaluate function", + "CouldNotFindFunctionWithName": "Could not find function with name.", + "CouldNotFindFunctionWithNameSuggestion": "We don't know what `{{name}}` means. Maybe you meant to use the `{{suggestion}}` function instead?", + "CouldNotFindValueWithName": "Could not find value with name '{{name}}'.", + "InfiniteLoop": "Your code ran for too long and we stopped it to prevent an infinite loop.", + "InvalidBinaryExpression": "Invalid binary expression", + "InvalidExpression": "Invalid expression", + "InvalidIndexGetterTarget": "Can't index object, only dictionaries and arrays can be indexed'.", + "InvalidIndexSetterTarget": "Can only set dictionaries and arrays via indexer.", + "InvalidNumberOfArguments": "Expected {{maxArity}} arguments but got {{numberOfArgs}}.", + "InvalidNumberOfArgumentsWithOptionalArguments": "Expected between {{minArity} and {{maxArity}} arguments but got {{numberOfArgs}}.", + "InvalidUnaryOperator": "Invalid unary operator", + "LogicError": "{{message}}", + "MissingParenthesesForFunctionCall": "Did you forget the parenthesis when trying to call the function?", + "NonCallableTarget": "Can only call functions.", + "OperandMustBeBoolean": "Operand must be a boolean.", + "OperandMustBeNumber": "Operand must be a number.", + "OperandsMustBeNumber": "Operands must be numbers.", + "OperandsMustBeTwoNumbersOrTwoStrings": "Operands must be two numbers or two strings.", + "RepeatCountMustBeGreaterThanZero": "The repeat argument must be greater than zero.", + "RepeatCountMustBeNumber": "repeat can only take a number as its argument." + }, + "disabledLanguageFeature": { + "ExcludeListViolation": "Usage of '{{tokenType}}' is not allowed`.", + "IncludeListViolation": "Usage of '{{tokenType}}' is not allowed`." + } + } +} diff --git a/app/javascript/interpreter/locales/nl/translation.json b/app/javascript/interpreter/locales/nl/translation.json new file mode 100644 index 0000000000..3cb7e1ac26 --- /dev/null +++ b/app/javascript/interpreter/locales/nl/translation.json @@ -0,0 +1,84 @@ +{ + "error": { + "syntax": { + "UnknownCharacter": "Onbekend karakter: '{{character}}'.", + "MissingDoubleQuoteToStartString": "Ben je het beginnende dubbele aanhalingsteken vergeten voor de string \"{{string}}\"?", + "MissingDoubleQuoteToTerminateString": "Ben je het afsluitende dubbele aanhalingsteken vergeten voor de string \"{{string}}\"?", + "MissingRightBraceToTerminatePlaceholder": "Ontbrekend sluitende accolade ('}') om de placeholder af te sluiten.", + "MissingBacktickToTerminateTemplateLiteral": "Ontbrekend achterste aanhalingsteken ('`') om de template literal af te sluiten.", + "MissingRightParenthesisAfterFunctionCall": "Ben je het afsluitende haakje vergeten om de {{function}} functie aan te roepen?", + "MissingLeftParenthesisAfterFunctionCall": "Ben je het beginnende haakje vergeten om de {{function}} functie aan te roepen?", + "ExceededMaximumNumberOfParameters": "Een function kan niet meer dan 255 parameters hebben.", + "InvalidAssignmentTarget": "Ongeldige toewijzingsdoel.", + "MissingColonAfterThenBranchOfTernaryOperator": "Ontbrekende ':' na de then branch van de ternaire operator.", + "MissingFieldNameOrIndexAfterLeftBracket": "Ontbrekende veld naam of index na '['.", + "MissingRightBracketAfterFieldNameOrIndex": "Ontbrekende ']' na veld naam of index", + "MissingRightParenthesisAfterExpression": "Ontbrekende ')' na expressie.", + "MissingExpression": "Ontbrekende expressie.", + "InvalidTemplateLiteral": "Ongeldige template literal.", + "MissingRightBracketAfterListElements": "Ontbrekende ']' na lijstelementen.", + "MissingStringAsKey": "Ontbrekende string als sleutel.", + "MissingRightBraceAfterMapElements": "Ontbrekende '}' na de elementen van een map.", + "MissingEndOfLine": "Einde van regel verwacht.", + "MissingFunctionName": "Ontbrekende functie naam.", + "MissingLeftParenthesisAfterFunctionName": "Ontbrekende '(' na functie naam.", + "MissingParameterName": "Ontbrekende parameter naam.", + "MissingRightParenthesisAfterParameters": "Ontbrekende ')' na parameters.", + "MissingLeftBraceToStartFunctionBody": "Ontbrekende '{' om functie body te starten.", + "MissingVariableName": "Ontbrekende variabele naam.", + "MissingEqualsSignAfterVariableNameToInitializeValue": "Ontbrekend gelijkteken (=) na variabele naam om waarde te initialiseren.", + "MissingConstantName": "Ontbrekende constante naam.", + "MissingEqualsSignAfterConstantNameToInitializeValue": "Ontbrekend gelijkteken (=) na constante naam om waarde te initialiseren.", + "MissingLeftParenthesisBeforeIfCondition": "Ontbrekende '(' vóór if-voorwaarde.", + "MissingRightParenthesisAfterIfCondition": "Ontbrekende ')' na if-voorwaarde.", + "MissingLeftBraceToStartIfBody": "Ontbrekende '{' om if-body te starten.", + "MissingLeftBraceToStartElseBody": "Ontbrekende '{' om else-body te starten.", + "MissingLeftBraceToStartRepeatBody": "Ontbrekende '{' om herhaal-body te starten.", + "MissingLeftParenthesisAfterWhile": "Ontbrekende '(' na 'while'", + "MissingRightParenthesisAfterWhileCondition": "Ontbrekende ')' na 'while'-voorwaarde", + "MissingLeftBraceToStartWhileBody": "Ontbrekende '{' om 'while'-body te starten", + "MissingLeftBraceToStartDoWhileBody": "Ontbrekende '{' om 'do while'-body te starten", + "MissingWhileBeforeDoWhileCondition": "Ontbrekende 'while' om 'while'-voorwaarde te starten", + "MissingRightParenthesisAfterDoWhileCondition": "Ontbrekende ')' na 'do/while'-voorwaarde", + "MissingLeftParenthesisAfterForeach": "Ontbrekende '(' na 'foreach'", + "MissingLetInForeachCondition": "Ontbrekende 'let' in foreach-voorwaarde", + "MissingElementNameAfterForeach": "Ontbrekende element naam na 'foreach'.", + "MissingOfAfterElementNameInForeach": "Ontbrekende 'of' na element naam in 'foreach'.", + "MissingRightParenthesisAfterForeachElement": "Ontbrekende ')' na 'foreach'-element", + "MissingLeftBraceToStartForeachBody": "Ontbrekende '{' om 'foreach'-body te starten", + "MissingRightBraceAfterBlock": "Ontbrekende '}' na blok." + }, + "semantic": { + "CannotAssignToConstant": "Een constante waarde kan geen nieuwe waarde toegekend krijgen.", + "InvalidPostfixOperand": "Ongeldig doel voor een update expressie.", + "DuplicateVariableName": "Er bestaat al een variabele met deze naam in deze scope.", + "TopLevelReturn": "Het return statement kan niet gebruikt worden in top-level statements.", + "VariableUsedInOwnInitializer": "Een variabele kan niet naar zichzelf verwijzen bij initialisatie." + }, + "runtime": { + "CouldNotEvaluateFunction": "Kon de functie niet evalueren", + "InvalidExpression": "Ongeldige expressie", + "MissingParenthesesForFunctionCall": "Ben je de haakjes vergeten toen je de functie probeerde aan te roepen?", + "RepeatCountMustBeNumber": "repeat accepteert alleen een getal als argument.", + "RepeatCountMustBeGreaterThanZero": "Het repeat argument moet groter zijn dan nul.", + "CouldNotFindFunctionWithName": "Kon functie met naam niet vinden.", + "CouldNotFindFunctionWithNameSuggestion": "We weten niet wat `{{name}}` betekent. Misschien bedoelde je de `{{suggestion}}` functie?", + "NonCallableTarget": "Alleen functies kunnen worden uitgevoerd.", + "InvalidNumberOfArguments": "Ontbrekende {{maxArity}} argumenten maar kreeg {{numberOfArgs}}.", + "InvalidNumberOfArgumentsWithOptionalArguments": "Ontbrekende tussen {{minArity}} en {{maxArity}} argumenten maar kreeg {{numberOfArgs}}.", + "InvalidUnaryOperator": "Ongeldige unaire operator", + "OperandsMustBeTwoNumbersOrTwoStrings": "Operanden moeten twee getallen of twee strings zijn.", + "InvalidBinaryExpression": "Ongeldige binaire expressie", + "InvalidIndexGetterTarget": "Kan object niet indexeren, alleen dictionaries en arrays kunnen geïndexeerd worden'.", + "InvalidIndexSetterTarget": "Kan alleen dictionaries en arrays instellen via indexer.", + "OperandMustBeNumber": "Operand moet een getal zijn.", + "OperandsMustBeNumber": "Operanden moeten getallen zijn.", + "OperandMustBeBoolean": "Operand moet een boolean zijn.", + "CouldNotFindValueWithName": "Kon waarde met naam '{{name}}' niet vinden." + }, + "disabledLanguageFeature": { + "ExcludeListViolation": "Gebruik van '{{tokenType}}' is niet toegestaan`.", + "IncludeListViolation": "Gebruik van '{{tokenType}}' is niet toegestaan`." + } + } +} diff --git a/app/javascript/interpreter/locales/system/translation.json b/app/javascript/interpreter/locales/system/translation.json new file mode 100644 index 0000000000..88d31cdd8e --- /dev/null +++ b/app/javascript/interpreter/locales/system/translation.json @@ -0,0 +1,93 @@ +{ + "error": { + "syntax": { + "ExceededMaximumNumberOfParameters": "ExceededMaximumNumberOfParameters", + "InvalidAssignmentTarget": "InvalidAssignmentTarget", + "InvalidNumericVariableName": "InvalidNumericVariableName: name: {{name}}", + "InvalidTemplateLiteral": "InvalidTemplateLiteral", + "MissingBacktickToTerminateTemplateLiteral": "MissingBacktickToTerminateTemplateLiteral", + "MissingConditionAfterIf": "MissingConditionAfterIf", + "MissingColonAfterThenBranchOfTernaryOperator": "MissingColonAfterThenBranchOfTernaryOperator", + "MissingCommaBetweenParameters": "MissingCommaBetweenParameters: parameter: {{parameter}}", + "MissingConstantName": "MissingConstantName", + "MissingDoToStartBlock": "MissingDoToStartBlock: type: {{type}}", + "MissingDoubleQuoteToStartString": "MissingDoubleQuoteToStartString: string: {{string}}", + "MissingDoubleQuoteToTerminateString": "MissingDoubleQuoteToTerminateString: string: {{string}}", + "MissingEndAfterBlock": "MissingEndAfterBlock: type: {{type}}", + "MissingEndOfLine": "MissingEndOfLine: previous: {{previous}}", + "MissingExpression": "MissingExpression", + "MissingFieldNameOrIndexAfterLeftBracket": "MissingFieldNameOrIndexAfterLeftBracket", + "MissingFunctionName": "MissingFunctionName", + "MissingLeftBraceToStartBody": "MissingLeftBraceToStartBody: type: {{type}}", + "MissingLeftBraceToStartForeachBody": "MissingLeftBraceToStartForeachBody", + "MissingLeftParenthesisAfterForeach": "MissingLeftParenthesisAfterForeach", + "MissingLeftParenthesisAfterFunctionCall": "MissingLeftParenthesisAfterFunctionCall: function: {{function}}", + "MissingLeftParenthesisAfterFunctionName": "MissingLeftParenthesisAfterFunctionName", + "MissingLeftParenthesisBeforeIfCondition": "MissingLeftParenthesisBeforeIfCondition", + "MissingLeftParenthesisAfterWhile": "MissingLeftParenthesisAfterWhile", + "MissingLetInForeachCondition": "MissingLetInForeachCondition", + "MissingOfAfterElementNameInForeach": "MissingOfAfterElementNameInForeach", + "MissingParameterName": "MissingParameterName", + "MissingRightBraceAfterBlock": "MissingRightBraceAfterBlock", + "MissingRightBraceAfterMapElements": "MissingRightBraceAfterMapElements", + "MissingRightBraceToTerminatePlaceholder": "MissingRightBraceToTerminatePlaceholder", + "MissingRightBracketAfterFieldNameOrIndex": "MissingRightBracketAfterFieldNameOrIndex", + "MissingRightBracketAfterListElements": "MissingRightBracketAfterListElements", + "MissingRightParenthesisAfterFunctionCall": "MissingRightParenthesisAfterFunctionCall: function: {{function}}", + "MissingRightParenthesisAfterDoWhileCondition": "MissingRightParenthesisAfterDoWhileCondition", + "MissingRightParenthesisAfterExpression": "MissingRightParenthesisAfterExpression", + "MissingRightParenthesisAfterExpressionWithPotentialTypo": "MissingRightParenthesisAfterExpressionWithPotentialTypo: actual: {{actual}}, potential: {{potential}}", + "MissingRightParenthesisAfterForeachElement": "MissingRightParenthesisAfterForeachElement", + "MissingRightParenthesisAfterIfCondition": "MissingRightParenthesisAfterIfCondition", + "MissingRightParenthesisAfterParameters": "MissingRightParenthesisAfterParameters", + "MissingRightParenthesisAfterWhileCondition": "MissingRightParenthesisAfterWhileCondition", + "MissingWithBeforeParameters": "MissingWithBeforeParameters", + "MissingStringAsKey": "MissingStringAsKey", + "MissingVariableName": "MissingVariableName", + "MissingWhileBeforeDoWhileCondition": "MissingWhileBeforeDoWhileCondition", + "DuplicateParameterName": "DuplicateParameterName: parameter: {{parameter}}", + "NumberContainsAlpha": "NumberContainsAlpha: suggestion: {{suggestion}}", + "NumberEndsWithDecimalPoint": "NumberEndsWithDecimalPoint: suggestion: {{suggestion}}", + "NumberStartsWithZero": "NumberStartsWithZero: suggestion: {{suggestion}}", + "NumberWithMultipleDecimalPoints": "NumberWithMultipleDecimalPoints: suggestion: {{suggestion}}", + "UnexpectedElseWithoutIf": "UnexpectedElseWithoutIf", + "UnexpectedLiteralExpressionAfterIf": "UnexpectedLiteralExpressionAfterIf", + "UnexpectedVariableExpressionAfterIfWithPotentialTypo": "UnexpectedVariableExpressionAfterIfWithPotentialTypo: actual: {{actual}}, potential: {{potential}}", + "UnknownCharacter": "UnknownCharacter: character: {{character}}", + "UnknownCharacterEquals": "UnknownCharacterEquals" + }, + "semantic": { + "CannotAssignToConstant": "CannotAssignToConstant", + "DuplicateVariableName": "DuplicateVariableName", + "InvalidPostfixOperand": "InvalidPostfixOperand", + "TopLevelReturn": "TopLevelReturn", + "VariableUsedInOwnInitializer": "VariableUsedInOwnInitializer" + }, + "runtime": { + "CouldNotEvaluateFunction": "CouldNotEvaluateFunction", + "CouldNotFindFunctionWithName": "CouldNotFindFunctionWithName", + "CouldNotFindFunctionWithNameSuggestion": "CouldNotFindFunctionWithNameSuggestion: name: {{name}}, suggestion: {{suggestion}}", + "CouldNotFindValueWithName": "CouldNotFindValueWithName: name: {{name}}", + "InfiniteLoop": "InfiniteLoop", + "InvalidBinaryExpression": "InvalidBinaryExpression", + "InvalidExpression": "InvalidExpression", + "InvalidIndexGetterTarget": "InvalidIndexGetterTarget", + "InvalidIndexSetterTarget": "InvalidIndexSetterTarget", + "InvalidNumberOfArguments": "InvalidNumberOfArguments: maxArity: {{maxArity}}, numberOfArgs: {{numberOfArgs}}", + "InvalidNumberOfArgumentsWithOptionalArguments": "InvalidNumberOfArgumentsWithOptionalArguments: minArity: {{minArity}}, maxArity: {{maxArity}}, numberOfArgs: {{numberOfArgs}}", + "InvalidUnaryOperator": "InvalidUnaryOperator", + "MissingParenthesesForFunctionCall": "MissingParenthesesForFunctionCall", + "NonCallableTarget": "NonCallableTarget", + "OperandMustBeBoolean": "OperandMustBeBoolean", + "OperandMustBeNumber": "OperandMustBeNumber", + "OperandsMustBeNumber": "OperandsMustBeNumber", + "OperandsMustBeTwoNumbersOrTwoStrings": "OperandsMustBeTwoNumbersOrTwoStrings", + "RepeatCountMustBeGreaterThanZero": "RepeatCountMustBeGreaterThanZero", + "RepeatCountMustBeNumber": "RepeatCountMustBeNumber" + }, + "disabledLanguageFeature": { + "ExcludeListViolation": "ExcludeListViolation: tokenType: {{tokenType}}", + "IncludeListViolation": "IncludeListViolation: tokenType: {{tokenType}}" + } + } +} diff --git a/app/javascript/interpreter/location.ts b/app/javascript/interpreter/location.ts new file mode 100644 index 0000000000..28f0a0290b --- /dev/null +++ b/app/javascript/interpreter/location.ts @@ -0,0 +1,54 @@ +import { Expression } from './expression' +import { Statement } from './statement' +import { type Token } from './/token' + +export class Span { + constructor(public begin: number, public end: number) {} + + public static between(from: Span, to: Span): Span { + return new Span(from.begin, to.end) + } +} + +export class Location { + constructor( + public line: number, + public relative: Span, + public absolute: Span + ) {} + + public toCode(code: string): string { + return code.substring(this.absolute.begin - 1, this.absolute.end - 1) + } + + public static fromLineOffset( + begin: number, + end: number, + line: number, + lineOffset: number + ): Location { + return new Location( + line, + new Span(begin - lineOffset, end - lineOffset), + new Span(begin, end) + ) + } + + public static between( + begin: Token | Expression | Statement, + end: Token | Expression | Statement + ): Location { + // TODO: fix spanning multiple lines + return new Location( + begin.location.line, + Span.between(begin.location.relative, end.location.relative), + Span.between(begin.location.absolute, end.location.absolute) + ) + } + + public static readonly unknown = new Location( + 1, + { begin: 1, end: 1 }, + { begin: 1, end: 1 } + ) +} diff --git a/app/javascript/interpreter/resolver.ts b/app/javascript/interpreter/resolver.ts new file mode 100644 index 0000000000..ee7ac80aad --- /dev/null +++ b/app/javascript/interpreter/resolver.ts @@ -0,0 +1,333 @@ +import { isString } from './checks' +import { SemanticError, type SemanticErrorType } from './error' +import { + ArrayExpression, + AssignExpression, + BinaryExpression, + CallExpression, + DictionaryExpression, + Expression, + type ExpressionVisitor, + GetExpression, + GroupingExpression, + LiteralExpression, + LogicalExpression, + SetExpression, + TemplateLiteralExpression, + TemplatePlaceholderExpression, + TemplateTextExpression, + TernaryExpression, + UnaryExpression, + UpdateExpression, + VariableExpression, +} from './expression' +import { Location } from './location' +import { + BlockStatement, + ConstantStatement, + DoWhileStatement, + ExpressionStatement, + ForeachStatement, + FunctionStatement, + IfStatement, + RepeatStatement, + RepeatUntilGameOverStatement, + ReturnStatement, + Statement, + type StatementVisitor, + VariableStatement, + WhileStatement, +} from './statement' +import type { Token } from './token' +import { translate } from './translator' + +type FunctionType = 'NONE' | 'FUNCTION' + +export class Resolver + implements ExpressionVisitor, StatementVisitor +{ + private readonly scopes: Map[] = [] + private readonly constants = new Set() + private currentFunction: FunctionType = 'NONE' + public readonly locals = new Map() + + constructor( + private allowVariableReassignment: boolean, + private globals: string[] + ) { + this.beginScope() + + for (const key of globals) { + this.declare(key) + this.define(key) + } + } + + public visitExpressionStatement(statement: ExpressionStatement): void { + this.resolve(statement.expression) + } + + public visitVariableStatement(statement: VariableStatement): void { + this.declare(statement.name) + this.resolve(statement.initializer) + this.define(statement.name) + } + + public visitConstantStatement(statement: ConstantStatement): void { + this.declareConstant(statement.name) + this.resolve(statement.initializer) + this.define(statement.name) + } + + public visitIfStatement(statement: IfStatement): void { + this.resolve(statement.condition) + this.resolve(statement.thenBranch) + if (statement.elseBranch !== null) this.resolve(statement.elseBranch) + } + + public visitRepeatStatement(statement: RepeatStatement): void { + this.resolve(statement.count) + this.resolve(statement.body) + } + + public visitRepeatUntilGameOverStatement( + statement: RepeatUntilGameOverStatement + ): void { + this.resolve(statement.body) + } + + public visitWhileStatement(statement: WhileStatement): void { + this.resolve(statement.condition) + this.resolve(statement.body) + } + + public visitDoWhileStatement(statement: DoWhileStatement): void { + this.resolve(statement.condition) + this.resolve(statement.body) + } + + public visitBlockStatement(statement: BlockStatement): void { + this.beginScope() + this.resolve(statement.statements) + this.endScope() + } + + public visitFunctionStatement(statement: FunctionStatement): void { + this.declare(statement.name) + this.define(statement.name) + this.resolveFunction(statement, 'FUNCTION') + } + + public visitReturnStatement(statement: ReturnStatement): void { + if (this.currentFunction === 'NONE') + this.error('TopLevelReturn', statement.location) + + if (statement.value !== null) this.resolve(statement.value) + } + + visitForeachStatement(statement: ForeachStatement): void { + this.resolve(statement.iterable) + this.beginScope() + this.declare(statement.elementName) + this.define(statement.elementName) + this.resolve(statement.body) + this.endScope() + } + + visitTemplateLiteralExpression(expression: TemplateLiteralExpression): void { + for (const part of expression.parts) this.resolve(part) + } + + visitTemplatePlaceholderExpression( + expression: TemplatePlaceholderExpression + ): void { + this.resolve(expression.inner) + } + + visitTemplateTextExpression(_expression: TemplateTextExpression): void {} + + visitArrayExpression(expression: ArrayExpression): void { + for (const element of expression.elements) this.resolve(element) + } + + visitDictionaryExpression(expression: DictionaryExpression): void { + for (const [_, value] of expression.elements) this.resolve(value) + } + + public visitCallExpression(expression: CallExpression): void { + this.resolve(expression.callee) + + for (const arg of expression.args) this.resolve(arg) + } + + public visitLiteralExpression(_expression: LiteralExpression): void {} + + public visitVariableExpression(expression: VariableExpression): void { + if (this.globals && this.globals[expression.name.lexeme]) return + + if ( + this.scopes.length > 0 && + this.scopes[this.scopes.length - 1].has(expression.name.lexeme) && + !this.scopes[this.scopes.length - 1].get(expression.name.lexeme) + ) + this.error('VariableUsedInOwnInitializer', expression.location, { + expression, + name: expression.name.lexeme, + }) + + this.resolveLocal(expression, expression.name) + } + + public visitUnaryExpression(expression: UnaryExpression): void { + this.resolve(expression.operand) + } + + public visitBinaryExpression(expression: BinaryExpression): void { + this.resolve(expression.left) + this.resolve(expression.right) + } + + public visitLogicalExpression(expression: LogicalExpression): void { + this.resolve(expression.left) + this.resolve(expression.right) + } + + public visitTernaryExpression(expression: TernaryExpression): void { + this.resolve(expression.condition) + this.resolve(expression.thenBranch) + this.resolve(expression.elseBranch) + } + + public visitGroupingExpression(expression: GroupingExpression): void { + this.resolve(expression.inner) + } + + public visitAssignExpression(expression: AssignExpression): void { + this.resolve(expression.value) + + if (this.constants.has(expression.name.lexeme)) + this.error('CannotAssignToConstant', expression.location) + + this.resolveLocal(expression, expression.name) + } + + public visitUpdateExpression(expression: UpdateExpression): void { + this.resolve(expression.operand) + + if (expression.operand instanceof VariableExpression) + this.resolveLocal(expression.operand, expression.operand.name) + else if (expression.operand instanceof GetExpression) + this.resolve(expression.operand.obj) + else this.error('InvalidPostfixOperand', expression.location) + } + + public visitGetExpression(expression: GetExpression): void { + this.resolve(expression.obj) + } + + public visitSetExpression(expression: SetExpression): void { + this.resolve(expression.obj) + this.resolve(expression.value) + } + + public resolve(element: Statement | Expression | Statement[]) { + if (element instanceof Statement || element instanceof Expression) { + element.accept(this) + return + } + + for (const statement of element) this.resolve(statement) + } + + private resolveLocal(expression: VariableExpression, name: Token) { + for (let i = this.scopes.length - 1; i >= 0; i--) { + if (this.scopes[i].has(name.lexeme)) { + if (this.constants.has(name.lexeme)) + this.error('CannotAssignToConstant', expression.location) + + this.setLocal(expression, this.scopes.length - 1 - i) + return + } + } + } + + private resolveFunction( + statement: FunctionStatement, + functionType: FunctionType + ) { + const enclosingFunction = this.currentFunction + this.currentFunction = functionType + + this.beginScope() + for (const param of statement.parameters) { + this.declare(param.name) + this.define(param.name) + } + this.resolve(statement.body) + this.endScope() + this.currentFunction = enclosingFunction + } + + private declareConstant(name: Token | string) { + this.constants.add(isString(name) ? name : name.lexeme) + this.declare(name) + } + + private declare(name: Token | string) { + if (this.scopes.length === 0) return + + const nameString = isString(name) ? name : name.lexeme + + if (this.allowVariableReassignment) { + if (this.scopes.find((scope) => scope.has(nameString))) { + return + } + } else { + const scope = this.scopes[this.scopes.length - 1] + if (scope.has(nameString)) { + this.error( + 'DuplicateVariableName', + isString(name) ? null : name.location, + { + name, + } + ) + } + } + + this.scopes[this.scopes.length - 1].set(nameString, false) + } + + private define(name: Token | string) { + if (this.scopes.length === 0) return + this.scopes[this.scopes.length - 1].set( + isString(name) ? name : name.lexeme, + true + ) + } + + private beginScope() { + this.scopes.push(new Map()) + } + + private endScope() { + this.scopes.pop() + } + + private setLocal(expression: Expression, depth: number): void { + this.locals.set(expression, depth) + } + + private error( + type: SemanticErrorType, + location: Location | null, + context: any = {} + ): never { + throw new SemanticError( + translate(`error.semantic.${type}`, context), + location, + type, + context + ) + } +} diff --git a/app/javascript/interpreter/statement.ts b/app/javascript/interpreter/statement.ts new file mode 100644 index 0000000000..f9226b1c33 --- /dev/null +++ b/app/javascript/interpreter/statement.ts @@ -0,0 +1,186 @@ +import { Expression } from './expression' +import { Location } from './location' +import type { Token } from './token' + +export interface StatementVisitor { + visitExpressionStatement(statement: ExpressionStatement): T + visitVariableStatement(statement: VariableStatement): T + visitConstantStatement(statement: ConstantStatement): T + visitIfStatement(statement: IfStatement): T + visitRepeatStatement(statement: RepeatStatement): T + visitRepeatUntilGameOverStatement(statement: RepeatUntilGameOverStatement): T + visitBlockStatement(statement: BlockStatement): T + visitFunctionStatement(statement: FunctionStatement): T + visitReturnStatement(statement: ReturnStatement): T + visitForeachStatement(statement: ForeachStatement): T + visitWhileStatement(statement: WhileStatement): T + visitDoWhileStatement(statement: DoWhileStatement): T +} + +export abstract class Statement { + abstract accept(visitor: StatementVisitor): T + abstract location: Location +} + +export class ExpressionStatement extends Statement { + constructor(public expression: Expression, public location: Location) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitExpressionStatement(this) + } +} + +export class VariableStatement extends Statement { + constructor( + public name: Token, + public initializer: Expression, + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitVariableStatement(this) + } +} + +export class ConstantStatement extends Statement { + constructor( + public name: Token, + public initializer: Expression, + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitConstantStatement(this) + } +} + +export class IfStatement extends Statement { + constructor( + public condition: Expression, + public thenBranch: Statement, + public elseBranch: Statement | null, + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitIfStatement(this) + } +} + +export class RepeatStatement extends Statement { + constructor( + public count: Expression, + public body: Statement[], + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitRepeatStatement(this) + } +} + +export class RepeatUntilGameOverStatement extends Statement { + constructor(public body: Statement[], public location: Location) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitRepeatUntilGameOverStatement(this) + } +} + +export class WhileStatement extends Statement { + constructor( + public condition: Expression, + public body: Statement[], + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitWhileStatement(this) + } +} + +export class DoWhileStatement extends Statement { + constructor( + public condition: Expression, + public body: Statement[], + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitDoWhileStatement(this) + } +} + +export class BlockStatement extends Statement { + constructor(public statements: Statement[], public location: Location) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitBlockStatement(this) + } +} + +export class FunctionParameter { + constructor(public name: Token, public defaultValue: Expression | null) {} +} + +export class FunctionStatement extends Statement { + constructor( + public name: Token, + public parameters: FunctionParameter[], + public body: Statement[], + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitFunctionStatement(this) + } +} + +export class ReturnStatement extends Statement { + constructor( + public keyword: Token, + public value: Expression | null, + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitReturnStatement(this) + } +} + +export class ForeachStatement extends Statement { + constructor( + public elementName: Token, + public iterable: Expression, + public body: Statement[], + public location: Location + ) { + super() + } + + public accept(visitor: StatementVisitor): T { + return visitor.visitForeachStatement(this) + } +} diff --git a/app/javascript/interpreter/token.ts b/app/javascript/interpreter/token.ts new file mode 100644 index 0000000000..deff3b5cbf --- /dev/null +++ b/app/javascript/interpreter/token.ts @@ -0,0 +1,11 @@ +import type { + Token as JikiscriptToken, + TokenType as JikiscriptTokenType, +} from './languages/jikiscript/token' +import type { + Token as JavascriptToken, + TokenType as JavascriptTokenType, +} from './languages/javascript/token' + +export type Token = JikiscriptToken | JavascriptToken +export type TokenType = JikiscriptTokenType | JavascriptTokenType diff --git a/app/javascript/interpreter/translator.ts b/app/javascript/interpreter/translator.ts new file mode 100644 index 0000000000..2191d73b89 --- /dev/null +++ b/app/javascript/interpreter/translator.ts @@ -0,0 +1,33 @@ +import i18next from 'i18next' +import i18n from 'i18next' +// import resourcesToBackend from "i18next-resources-to-backend"; + +const DEFAULT_LANGUAGE = 'en' +const DEBUG = false + +import enLangPack from './locales/en/translation.json' +import nlLangPack from './locales/nl/translation.json' +import systemLangPack from './locales/system/translation.json' + +i18n.init({ + debug: DEBUG, + lng: DEFAULT_LANGUAGE, + initImmediate: false, +}) +i18next.addResourceBundle('system', 'translation', systemLangPack) +i18next.addResourceBundle('en', 'translation', enLangPack) +i18next.addResourceBundle('nl', 'translation', nlLangPack) + +export function getLanguage(): string { + return i18next.language +} + +export async function changeLanguage(language: string): Promise { + if (i18next.language === language) return + + await i18next.changeLanguage(language) +} + +export function translate(key: string, options = {}): string { + return i18next.t(key, options).toString() +} diff --git a/app/javascript/packs/bootcamp-ui.tsx b/app/javascript/packs/bootcamp-ui.tsx new file mode 100644 index 0000000000..d429c11c0e --- /dev/null +++ b/app/javascript/packs/bootcamp-ui.tsx @@ -0,0 +1,33 @@ +import React from 'react' +import { lazy, Suspense } from 'react' +import { initReact } from '../utils/react-bootloader' +import '@hotwired/turbo-rails' +import { camelizeKeysAs } from '@/utils/camelize-keys-as' + +const SolveExercisePage = lazy( + () => import('../components/bootcamp/SolveExercisePage/SolveExercisePage') +) + +declare global { + interface Window { + turboLoaded: boolean + } +} +// As we're sensitive to the order of things across different packs +// we set a window-level constant to record when turbo has loaded +// so that other packs that haven't yet rendered events can respond to them +document.addEventListener('turbo:load', () => (window.turboLoaded = true)) + +const mappings = { + 'bootcamp-solve-exercise-page': ( + data: SolveExercisePageProps + ): JSX.Element => ( + + (data)} /> + + ), +} + +// Add all react components here. +// Each should map 1-1 to a component in app/helpers/components +initReact(mappings) diff --git a/app/models/bootcamp/exercise.rb b/app/models/bootcamp/exercise.rb index 1c95016d03..8d123d832c 100644 --- a/app/models/bootcamp/exercise.rb +++ b/app/models/bootcamp/exercise.rb @@ -41,7 +41,7 @@ def introduction_html end def stub - file_contents("stub.jk") + file_contents("stub.jiki") end def readonly_ranges @@ -50,6 +50,6 @@ def readonly_ranges private def file_contents(filename) - File.read(Rails.root / "content/projects/#{project.slug}/exercises/#{slug}/#{filename}") + File.read(Rails.root / "bootcamp_content/projects/#{project.slug}/exercises/#{slug}/#{filename}") end end diff --git a/app/views/bootcamp/exercises/edit.html.haml b/app/views/bootcamp/exercises/edit.html.haml index 3d210038f7..9d31bd69a7 100644 --- a/app/views/bootcamp/exercises/edit.html.haml +++ b/app/views/bootcamp/exercises/edit.html.haml @@ -1,6 +1,6 @@ - content_for :head do %meta{ name: "turbo-visit-control", content: "reload" } -= render ReactComponents::SolveExercisePage.new(@solution) += render ReactComponents::Bootcamp::SolveExercisePage.new(@solution) -# This is the entry point for the exercise editor... diff --git a/app/views/layouts/bootcamp-ui.haml b/app/views/layouts/bootcamp-ui.haml index 202588d1a8..7ff369b374 100644 --- a/app/views/layouts/bootcamp-ui.haml +++ b/app/views/layouts/bootcamp-ui.haml @@ -29,7 +29,8 @@ %link{ href: "/icon.png", rel: "icon", type: "image/png" } %link{ href: "/icon.svg", rel: "icon", type: "image/svg+xml" } %link{ href: "/icon.png", rel: "apple-touch-icon" } - = javascript_include_tag "application", "data-turbo-track": "reload", type: "module", crossorigin: :anonymous + -# = javascript_include_tag "application", "data-turbo-track": "reload", type: "module", crossorigin: :anonymous + = javascript_include_tag "bootcamp-ui", "data-turbo-track": "reload", type: "module", crossorigin: :anonymous %body{ class: body_class } %header.c-site-header diff --git a/bootcamp_content/projects/maze/exercises/manual-solve/stub.jk b/bootcamp_content/projects/maze/exercises/manual-solve/stub.jiki similarity index 100% rename from bootcamp_content/projects/maze/exercises/manual-solve/stub.jk rename to bootcamp_content/projects/maze/exercises/manual-solve/stub.jiki diff --git a/package.json b/package.json index aa0a0c945f..86dc7d5548 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,18 @@ "@ballerina/highlightjs-ballerina": "^1.0.1", "@bugsnag/js": "^7.10.0", "@bugsnag/plugin-react": "^7.19.0", + "@codemirror/commands": "^6.7.1", "@codemirror/lang-cpp": "^6.0.2", "@codemirror/lang-java": "^6.0.1", - "@codemirror/lang-javascript": "^6.2.2", + "@codemirror/lang-javascript": "^6.2.1", "@codemirror/lang-php": "^6.0.1", "@codemirror/lang-python": "^6.1.5", "@codemirror/lang-rust": "^6.0.1", "@codemirror/lang-yaml": "^6.1.1", "@codemirror/legacy-modes": "^6.4.0", + "@codemirror/state": "^6.5.0", "@codemirror/theme-one-dark": "^6.1.2", + "@codemirror/view": "^6.24.0", "@exercism/active-background": "^0.6.2", "@exercism/codemirror-lang-arturo": "^0.1.6", "@exercism/codemirror-lang-gleam": "^2.0.1", @@ -23,8 +26,11 @@ "@exercism/highlightjs-gdscript": "^0.0.1", "@exercism/highlightjs-uiua": "^0.0.4", "@exercism/twine2-story-format": "https://github.com/exercism/twine2-story-format.git", + "@floating-ui/dom": "^1.6.12", "@gleam-lang/highlight.js-gleam": "^1.0.0", + "@hotwired/stimulus": "^3.2.2", "@hotwired/turbo-rails": "^7.3.0", + "@plutojl/lang-julia": "^0.12.1", "@popperjs/core": "^2.11.8", "@rails/actioncable": "^6.0.0", "@sector-labs/postcss-inline-class": "^0.0.6", @@ -32,23 +38,28 @@ "@stripe/stripe-js": "^1.54.1", "@tanstack/react-query": "^4.33.0", "@tippyjs/react": "^4.2.5", + "@types/canvas-confetti": "^1.6.4", + "@uidotdev/usehooks": "^2.4.1", "@xstate/react": "^3.2.2", "abortcontroller-polyfill": "^1.7.3", "ace-builds": "^1.4.12", "actioncable": "^5.2.4-3", - "autoprefixer": "^10.4.0", + "animejs": "^3.2.2", + "autoprefixer": "latest", "browserslist-to-esbuild": "^1.1.1", "canvas-confetti": "^1.9.3", "chart.js": "^3.1.0", "codemirror": "^6.0.1", "codemirror-lang-elixir": "https://github.com/sachinraja/codemirror-lang-elixir", "codemirror-lang-jq": "^1.0.0", - "codemirror6-abap": "^0.1.3", + "codemirror-readonly-ranges": "^0.1.0-alpha.2", "copy-to-clipboard": "^3.3.1", "core-js": "^3.6.5", "cssnano": "^5.0.17", "currency.js": "^2.0.4", "dayjs": "^1.8.35", + "didyoumean": "^1.2.2", + "diff": "^7.0.0", "diff2html": "^3.4.5", "easymde": "^2.15.0", "esbuild": "^0.14.5", @@ -56,7 +67,7 @@ "focus-visible": "^5.2.0", "fontfaceobserver": "^2.1.0", "global": "^4.4.0", - "highlight.js": "11.9.0", + "highlight.js": "^11.10.0", "highlightjs-bqn": "^0.0.1", "highlightjs-chapel": "^0.1.0", "highlightjs-cobol": "^0.3.1", @@ -66,14 +77,18 @@ "highlightjs-sap-abap": "^0.2.0", "highlightjs-zig": "^1.0.2", "humps": "^2.0.1", - "lang-julia": "^0.1.0", + "i18next": "^23.16.6", + "i18next-resources-to-backend": "^1.2.1", + "immer": "^10.1.1", "localforage": "^1.9.0", "lodash": "^4.17.20", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0", "lottie-web": "^5.12.2", "mousetrap": "^1.6.5", "nim-codemirror-mode": "^0.3.0", "pluralize": "^8.0.0", - "postcss": "^8.4.5", + "postcss": "latest", "postcss-cli": "^9.1.0", "postcss-flexbugs-fixes": "^5.0.2", "postcss-hexrgba": "^2.1.0", @@ -82,9 +97,9 @@ "postcss-reuse": "^2.2.0", "prop-types": "^15.7.2", "qs": "^6.9.6", - "react": "^18.2.0", + "react": "^18.3.1", "react-app-polyfill": "^2.0.0", - "react-dom": "^18.2.0", + "react-dom": "^18.3.1", "react-error-boundary": "^3.1.0", "react-fast-compare": "^3.2.0", "react-google-recaptcha": "^2.1.0", @@ -97,12 +112,16 @@ "reconnecting-websocket": "3.2.2", "regenerator-runtime": "^0.13.7", "rough-notation": "^0.5.1", - "tailwindcss": "^3.4.14", + "string-similarity-js": "^2.1.4", + "tailwindcss": "latest", + "tslib": "^2.8.1", + "typewriter-effect": "^2.21.0", "ua-parser-js": "^1.0.37", "use-is-mounted": "^1.0.0", "use-memory-value": "^1.2.0", "uuid": "^8.3.1", - "xstate": "^4.38.2" + "xstate": "^4.38.2", + "zustand": "^5.0.1" }, "version": "0.1.0", "devDependencies": { @@ -111,6 +130,7 @@ "@babel/preset-env": "^7.14.2", "@babel/preset-react": "^7.13.13", "@babel/preset-typescript": "^7.13.0", + "@happy-dom/global-registrator": "^15.11.6", "@jackfranklin/test-data-bot": "^1.3.0", "@prettier/plugin-ruby": "^0.18.2", "@testing-library/dom": "^9.3.1", @@ -118,10 +138,16 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^12.6.0", "@types/actioncable": "^5.2.3", + "@types/animejs": "^3.1.12", + "@types/bun": "^1.1.13", + "@types/didyoumean": "^1.2.3", + "@types/diff": "^6.0.0", "@types/fontfaceobserver": "^0.0.6", "@types/humps": "^2.0.0", "@types/jquery": "^3.5.5", "@types/lodash": "^4.14.165", + "@types/lodash.clonedeep": "^4.5.9", + "@types/lodash.isequal": "^4.5.8", "@types/mousetrap": "^1.6.8", "@types/normalize-url": "^4.2.0", "@types/pluralize": "^0.0.29", @@ -162,5 +188,8 @@ "build:css": "postcss ./app/css/packs/**/*.css --dir .built-assets", "build": "./app/javascript/esbuild.js", "prepare": "husky install" + }, + "resolutions": { + "@codemirror/state": "6.5.0" } } diff --git a/yarn.lock b/yarn.lock index ff788e132d..3204f48789 100644 --- a/yarn.lock +++ b/yarn.lock @@ -977,6 +977,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.23.2": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" + integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.16.7", "@babel/template@^7.3.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" @@ -1081,18 +1088,6 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@codemirror/autocomplete@^0.19.0": - version "0.19.15" - resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-0.19.15.tgz#061f09063dc2a68668d85d7ac8430c7bc6df1a82" - integrity sha512-GQWzvvuXxNUyaEk+5gawbAD8s51/v2Chb++nx0e2eGWrphWk42isBtzOMdc3DxrxrZtPZ55q2ldNp+6G8KJLIQ== - dependencies: - "@codemirror/language" "^0.19.0" - "@codemirror/state" "^0.19.4" - "@codemirror/text" "^0.19.2" - "@codemirror/tooltip" "^0.19.12" - "@codemirror/view" "^0.19.0" - "@lezer/common" "^0.15.0" - "@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.3.2": version "6.15.0" resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.15.0.tgz#37bc320f20cdda332d6bf4d1fc7f300f8fc5f04c" @@ -1103,6 +1098,16 @@ "@codemirror/view" "^6.17.0" "@lezer/common" "^1.0.0" +"@codemirror/autocomplete@^6.10.2": + version "6.18.4" + resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.4.tgz#4394f55d6771727179f2e28a871ef46bbbeb11b1" + integrity sha512-sFAphGQIqyQZfP2ZBsSHV7xQvo9Py0rV0dW7W3IMRdS+zDuNb2l3no78CvUaWKGfzFjI4FTrLdUSj86IGb2hRA== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.17.0" + "@lezer/common" "^1.0.0" + "@codemirror/autocomplete@^6.15.0": version "6.16.0" resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.16.0.tgz#595eb30099ba91a835ed65ed8ff7497388f604b3" @@ -1123,17 +1128,15 @@ "@codemirror/view" "^6.0.0" "@lezer/common" "^1.1.0" -"@codemirror/highlight@^0.19.0": - version "0.19.8" - resolved "https://registry.yarnpkg.com/@codemirror/highlight/-/highlight-0.19.8.tgz#a95aee8ae4389b01f820aa79c48f7b4388087d92" - integrity sha512-v/lzuHjrYR8MN2mEJcUD6fHSTXXli9C1XGYpr+ElV6fLBIUhMTNKR3qThp611xuWfXfwDxeL7ppcbkM/MzPV3A== +"@codemirror/commands@^6.7.1": + version "6.7.1" + resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.7.1.tgz#04561e95bc0779eaa49efd63e916c4efb3bbf6d6" + integrity sha512-llTrboQYw5H4THfhN4U3qCnSZ1SOJ60ohhz+SzU0ADGtwlc533DtklQP0vSFaQuCPDn3BPpOd1GbbnUtwNjsrw== dependencies: - "@codemirror/language" "^0.19.0" - "@codemirror/rangeset" "^0.19.0" - "@codemirror/state" "^0.19.3" - "@codemirror/view" "^0.19.39" - "@lezer/common" "^0.15.0" - style-mod "^4.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.4.0" + "@codemirror/view" "^6.27.0" + "@lezer/common" "^1.1.0" "@codemirror/lang-cpp@^6.0.2": version "6.0.2" @@ -1177,7 +1180,7 @@ "@codemirror/language" "^6.0.0" "@lezer/java" "^1.0.0" -"@codemirror/lang-javascript@^6.0.0", "@codemirror/lang-javascript@^6.2.2": +"@codemirror/lang-javascript@^6.0.0", "@codemirror/lang-javascript@^6.2.1": version "6.2.2" resolved "https://registry.yarnpkg.com/@codemirror/lang-javascript/-/lang-javascript-6.2.2.tgz#7141090b22994bef85bcc5608a3bc1257f2db2ad" integrity sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg== @@ -1232,17 +1235,6 @@ "@lezer/highlight" "^1.2.0" "@lezer/yaml" "^1.0.0" -"@codemirror/language@^0.19.0": - version "0.19.10" - resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-0.19.10.tgz#c3d1330fa5de778c6b6b5177af5572a3d9d596b5" - integrity sha512-yA0DZ3RYn2CqAAGW62VrU8c4YxscMQn45y/I9sjBlqB1e2OTQLg4CCkMBuMSLXk4xaqjlsgazeOQWaJQOKfV8Q== - dependencies: - "@codemirror/state" "^0.19.0" - "@codemirror/text" "^0.19.0" - "@codemirror/view" "^0.19.0" - "@lezer/common" "^0.15.5" - "@lezer/lr" "^0.15.0" - "@codemirror/language@^6.0.0", "@codemirror/language@^6.10.1", "@codemirror/language@^6.4.0", "@codemirror/language@^6.6.0", "@codemirror/language@^6.8.0": version "6.10.1" resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.1.tgz#428c932a158cb75942387acfe513c1ece1090b05" @@ -1267,6 +1259,18 @@ "@lezer/lr" "^1.0.0" style-mod "^4.0.0" +"@codemirror/language@^6.9.1": + version "6.10.8" + resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.8.tgz#3e3a346a2b0a8cf63ee1cfe03349eb1965dce5f9" + integrity sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw== + dependencies: + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.23.0" + "@lezer/common" "^1.1.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.0.0" + style-mod "^4.0.0" + "@codemirror/legacy-modes@^6.4.0": version "6.4.0" resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-6.4.0.tgz#3cf7a863da5deebbd7bf9a90f12f89f06cca6d46" @@ -1283,13 +1287,6 @@ "@codemirror/view" "^6.0.0" crelt "^1.0.5" -"@codemirror/rangeset@^0.19.0", "@codemirror/rangeset@^0.19.5": - version "0.19.9" - resolved "https://registry.yarnpkg.com/@codemirror/rangeset/-/rangeset-0.19.9.tgz#e80895de93c39dc7899f5be31d368c9d88aa4efc" - integrity sha512-V8YUuOvK+ew87Xem+71nKcqu1SXd5QROMRLMS/ljT5/3MCxtgrRie1Cvild0G/Z2f1fpWxzX78V0U4jjXBorBQ== - dependencies: - "@codemirror/state" "^0.19.0" - "@codemirror/search@^6.0.0": version "6.5.6" resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.6.tgz#8f858b9e678d675869112e475f082d1e8488db93" @@ -1299,34 +1296,12 @@ "@codemirror/view" "^6.0.0" crelt "^1.0.5" -"@codemirror/state@^0.19.0", "@codemirror/state@^0.19.3", "@codemirror/state@^0.19.4": - version "0.19.9" - resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-0.19.9.tgz#b797f9fbc204d6dc7975485e231693c09001b0dd" - integrity sha512-psOzDolKTZkx4CgUqhBQ8T8gBc0xN5z4gzed109aF6x7D7umpDRoimacI/O6d9UGuyl4eYuDCZmDFr2Rq7aGOw== - dependencies: - "@codemirror/text" "^0.19.0" - -"@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0": - version "6.4.1" - resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.4.1.tgz#da57143695c056d9a3c38705ed34136e2b68171b" - integrity sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A== - -"@codemirror/stream-parser@^0.19.0": - version "0.19.9" - resolved "https://registry.yarnpkg.com/@codemirror/stream-parser/-/stream-parser-0.19.9.tgz#34955ea91a8047cf72abebd5ce28f0d332aeca48" - integrity sha512-WTmkEFSRCetpk8xIOvV2yyXdZs3DgYckM0IP7eFi4ewlxWnJO/H4BeJZLs4wQaydWsAqTQoDyIwNH1BCzK5LUQ== +"@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0", "@codemirror/state@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.5.0.tgz#e98dde85620618651543152fe1c2483300a0ccc9" + integrity sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw== dependencies: - "@codemirror/highlight" "^0.19.0" - "@codemirror/language" "^0.19.0" - "@codemirror/state" "^0.19.0" - "@codemirror/text" "^0.19.0" - "@lezer/common" "^0.15.0" - "@lezer/lr" "^0.15.0" - -"@codemirror/text@^0.19.0", "@codemirror/text@^0.19.2": - version "0.19.6" - resolved "https://registry.yarnpkg.com/@codemirror/text/-/text-0.19.6.tgz#9adcbd8137f69b75518eacd30ddb16fd67bbac45" - integrity sha512-T9jnREMIygx+TPC1bOuepz18maGq/92q2a+n4qTqObKwvNMg+8cMTslb8yxeEDEq7S3kpgGWxgO1UWbQRij0dA== + "@marijn/find-cluster-break" "^1.0.0" "@codemirror/theme-one-dark@^6.1.2": version "6.1.2" @@ -1338,36 +1313,6 @@ "@codemirror/view" "^6.0.0" "@lezer/highlight" "^1.0.0" -"@codemirror/tooltip@^0.19.12": - version "0.19.16" - resolved "https://registry.yarnpkg.com/@codemirror/tooltip/-/tooltip-0.19.16.tgz#6ba2c43f9d8e3d943d9d7bbae22bf800f7726a22" - integrity sha512-zxKDHryUV5/RS45AQL+wOeN+i7/l81wK56OMnUPoTSzCWNITfxHn7BToDsjtrRKbzHqUxKYmBnn/4hPjpZ4WJQ== - dependencies: - "@codemirror/state" "^0.19.0" - "@codemirror/view" "^0.19.0" - -"@codemirror/view@^0.19.0": - version "0.19.40" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-0.19.40.tgz#1be9cac1725568b7fba2252658a6f255b29339eb" - integrity sha512-0CQV99+/nIKTVVbDs0XjW4Rkp8TobzJBXRaUHF6mOroVjuIBBcolE1eAGVEU5LrCS44C798jiP4r/HhLDNS+rw== - dependencies: - "@codemirror/rangeset" "^0.19.5" - "@codemirror/state" "^0.19.3" - "@codemirror/text" "^0.19.0" - style-mod "^4.0.0" - w3c-keyname "^2.2.4" - -"@codemirror/view@^0.19.39": - version "0.19.48" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-0.19.48.tgz#1c657e2b0f8ed896ac6448d6e2215ab115e2a0fc" - integrity sha512-0eg7D2Nz4S8/caetCTz61rK0tkHI17V/d15Jy0kLOT8dTLGGNJUponDnW28h2B6bERmPlVHKh8MJIr5OCp1nGw== - dependencies: - "@codemirror/rangeset" "^0.19.5" - "@codemirror/state" "^0.19.3" - "@codemirror/text" "^0.19.0" - style-mod "^4.0.0" - w3c-keyname "^2.2.4" - "@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0": version "6.26.2" resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.26.2.tgz#6df950954cee33933514978c5bbd2da9d546466c" @@ -1377,6 +1322,15 @@ style-mod "^4.1.0" w3c-keyname "^2.2.4" +"@codemirror/view@^6.24.0", "@codemirror/view@^6.27.0": + version "6.36.1" + resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.36.1.tgz#3c543b8fd72c96b30c4b2b1464d1ebce7e0c5c4b" + integrity sha512-miD1nyT4m4uopZaDdO2uXU/LLHliKNYL9kB1C1wJHrunHLm/rpkb5QVSokqgw9hFqEZakrdlb/VGWX8aYZTslQ== + dependencies: + "@codemirror/state" "^6.5.0" + style-mod "^4.1.0" + w3c-keyname "^2.2.4" + "@csstools/selector-specificity@^2.0.0": version "2.2.0" resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" @@ -1559,6 +1513,13 @@ dependencies: "@floating-ui/utils" "^0.1.3" +"@floating-ui/core@^1.6.0": + version "1.6.8" + resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" + integrity sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA== + dependencies: + "@floating-ui/utils" "^0.2.8" + "@floating-ui/dom@^1.0.1": version "1.5.3" resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa" @@ -1567,16 +1528,41 @@ "@floating-ui/core" "^1.4.2" "@floating-ui/utils" "^0.1.3" +"@floating-ui/dom@^1.6.12": + version "1.6.12" + resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556" + integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w== + dependencies: + "@floating-ui/core" "^1.6.0" + "@floating-ui/utils" "^0.2.8" + "@floating-ui/utils@^0.1.3": version "0.1.6" resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9" integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== +"@floating-ui/utils@^0.2.8": + version "0.2.8" + resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" + integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== + "@gleam-lang/highlight.js-gleam@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@gleam-lang/highlight.js-gleam/-/highlight.js-gleam-1.0.0.tgz#c9868daf7bc04df3477aaa3357c49a27edd3a18a" integrity sha512-PNtTN5u7yQgo3uj+vm4SkZ2dbH+ozVMlsbaq8KdrNW5OPWsbRsPluSvGrhCkjJ2RVQKBsKK1o8WTjEU1hNTY1A== +"@happy-dom/global-registrator@^15.11.6": + version "15.11.7" + resolved "https://registry.yarnpkg.com/@happy-dom/global-registrator/-/global-registrator-15.11.7.tgz#690ce2c1f68ad35767672b62ef643a91a0f46d70" + integrity sha512-mfOoUlIw8VBiJYPrl5RZfMzkXC/z7gbSpi2ecycrj/gRWLq2CMV+Q+0G+JPjeOmuNFgg0skEIzkVFzVYFP6URw== + dependencies: + happy-dom "^15.11.7" + +"@hotwired/stimulus@^3.2.2": + version "3.2.2" + resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.2.2.tgz#071aab59c600fed95b97939e605ff261a4251608" + integrity sha512-eGeIqNOQpXoPAIP7tC1+1Yc1yl1xnwYqg+3mzqxyrbE5pg5YFBZcA6YoTiByJB6DKAEsiWtl6tjTJS4IYtbB7A== + "@hotwired/turbo-rails@^7.3.0": version "7.3.0" resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-7.3.0.tgz#422c21752509f3edcd6c7b2725bbe9e157815f51" @@ -1884,11 +1870,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@lezer/common@^0.15.0", "@lezer/common@^0.15.5": - version "0.15.12" - resolved "https://registry.yarnpkg.com/@lezer/common/-/common-0.15.12.tgz#2f21aec551dd5fd7d24eb069f90f54d5bc6ee5e9" - integrity sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig== - "@lezer/common@^1.0.0", "@lezer/common@^1.0.2", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0", "@lezer/common@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" @@ -1946,13 +1927,6 @@ "@lezer/highlight" "^1.1.3" "@lezer/lr" "^1.3.0" -"@lezer/lr@^0.15.0": - version "0.15.8" - resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-0.15.8.tgz#1564a911e62b0a0f75ca63794a6aa8c5dc63db21" - integrity sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg== - dependencies: - "@lezer/common" "^0.15.0" - "@lezer/lr@^1.0.0", "@lezer/lr@^1.1.0", "@lezer/lr@^1.3.0", "@lezer/lr@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.0.tgz#ed52a75dbbfbb0d1eb63710ea84c35ee647cb67e" @@ -2003,6 +1977,11 @@ "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.4.0" +"@marijn/find-cluster-break@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz#775374306116d51c0c500b8c4face0f9a04752d8" + integrity sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2034,6 +2013,25 @@ resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@plutojl/lang-julia@^0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@plutojl/lang-julia/-/lang-julia-0.12.1.tgz#638016a5a743aa66bd40f1dd3094ab9e40757e00" + integrity sha512-lBF5ycjeuYrDCRiUejkc8FR5nbvvuSMnoW9MsAAJieToy37HAK2omRSbY0WT3aniaW8ZHBiuWsLZUDpZdUl28A== + dependencies: + "@codemirror/autocomplete" "^6.10.2" + "@codemirror/language" "^6.9.1" + "@lezer/common" "^1.1.0" + "@plutojl/lezer-julia" "^0.12.1" + +"@plutojl/lezer-julia@^0.12.1": + version "0.12.1" + resolved "https://registry.yarnpkg.com/@plutojl/lezer-julia/-/lezer-julia-0.12.1.tgz#397f809a685d20539024132ae9e8cb2b9f9590ec" + integrity sha512-xqjtYCCqjMhwvMF7NTwA0/L21+fkuVaU5VxAj7nJXBSF0BJnRm0TexWTsTbJMuG4o5v4SpxhEa5zb4dqMjqsKQ== + dependencies: + "@lezer/common" "^1.2.1" + "@lezer/highlight" "^1.2.0" + "@lezer/lr" "^1.4.0" + "@popperjs/core@^2.11.8": version "2.11.8" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" @@ -2176,6 +2174,11 @@ resolved "https://registry.yarnpkg.com/@types/actioncable/-/actioncable-5.2.7.tgz#b42de922ba32f1a46c863df1ed32807ab08dda80" integrity sha512-HVpCvvE4Att0vSfCVNHf3gmCoqQPlySWIhH4THkG4r0hc0IcvRa0gIVyd9ekswMf3WiBsDc52OKnduIZQ7qcRw== +"@types/animejs@^3.1.12": + version "3.1.12" + resolved "https://registry.yarnpkg.com/@types/animejs/-/animejs-3.1.12.tgz#78fcc3df03ac07cbaef50fd37512e5031826dc42" + integrity sha512-fpdH+ZtlO0kqjTOqRaBdsEmvpRNOayI8k4EVkEtitL5l6wducDOXk0rgQgfZqWf/ZX9DzXrHf257S5i9xTcISQ== + "@types/aria-query@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" @@ -2214,6 +2217,18 @@ dependencies: "@babel/types" "^7.3.0" +"@types/bun@^1.1.13": + version "1.1.14" + resolved "https://registry.yarnpkg.com/@types/bun/-/bun-1.1.14.tgz#587dead368410b281b1bcbfb61d3ce1a07a63234" + integrity sha512-opVYiFGtO2af0dnWBdZWlioLBoxSdDO5qokaazLhq8XQtGZbY4pY3/JxY8Zdf/hEwGubbp7ErZXoN1+h2yesxA== + dependencies: + bun-types "1.1.37" + +"@types/canvas-confetti@^1.6.4": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@types/canvas-confetti/-/canvas-confetti-1.9.0.tgz#d1077752e046413c9881fbb2ba34a70ebe3c1773" + integrity sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg== + "@types/codemirror@0.0.109": version "0.0.109" resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.109.tgz#89d575ff1c7b462c4c3b8654f8bb38e5622e9036" @@ -2233,6 +2248,16 @@ resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== +"@types/didyoumean@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@types/didyoumean/-/didyoumean-1.2.3.tgz#ae82af90c8ad3e9606f428821e90a12bfa80eba9" + integrity sha512-jmogYbzJs7gehniakiGVlKCxrEqVfYL5oKdV2/026DGMGlhbYJWuO88oM4RcncgoZp0p/rCO7ipiYaxYxWedow== + +"@types/diff@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@types/diff/-/diff-6.0.0.tgz#031f27cf57564f3cce825f38fb19fdd4349ad07a" + integrity sha512-dhVCYGv3ZSbzmQaBSagrv1WJ6rXCdkyTcDyoNu1MD8JohI7pR7k8wdZEm+mvdxRKXyHVwckFzWU1vJc+Z29MlA== + "@types/estree@*": version "0.0.50" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" @@ -2299,6 +2324,25 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== +"@types/lodash.clonedeep@^4.5.9": + version "4.5.9" + resolved "https://registry.yarnpkg.com/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz#ea48276c7cc18d080e00bb56cf965bcceb3f0fc1" + integrity sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q== + dependencies: + "@types/lodash" "*" + +"@types/lodash.isequal@^4.5.8": + version "4.5.8" + resolved "https://registry.yarnpkg.com/@types/lodash.isequal/-/lodash.isequal-4.5.8.tgz#b30bb6ff6a5f6c19b3daf389d649ac7f7a250499" + integrity sha512-uput6pg4E/tj2LGxCZo9+y27JNyB2OZuuI/T5F+ylVDYuqICLG2/ktjxx0v6GvVntAf8TvEzeQLcV0ffRirXuA== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.17.13" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" + integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== + "@types/lodash@4.14.178", "@types/lodash@^4.14.165": version "4.14.178" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" @@ -2329,6 +2373,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.14.tgz#33b9b94f789a8fedd30a68efdbca4dbb06b61f20" integrity sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng== +"@types/node@~20.12.8": + version "20.12.14" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.14.tgz#0c5cf7ef26aedfd64b0539bba9380ed1f57dcc77" + integrity sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg== + dependencies: + undici-types "~5.26.4" + "@types/normalize-url@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@types/normalize-url/-/normalize-url-4.2.0.tgz#b72486d1d87e70b2b94bd34d9300fe41c736f788" @@ -2446,6 +2497,13 @@ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== +"@types/ws@~8.5.10": + version "8.5.13" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.13.tgz#6414c280875e2691d0d1e080b05addbf5cb91e20" + integrity sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA== + dependencies: + "@types/node" "*" + "@types/yargs-parser@*": version "20.2.1" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" @@ -2535,6 +2593,11 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" +"@uidotdev/usehooks@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@uidotdev/usehooks/-/usehooks-2.4.1.tgz#4b733eaeae09a7be143c6c9ca158b56cc1ea75bf" + integrity sha512-1I+RwWyS+kdv3Mv0Vmc+p0dPYH0DTRAo04HLyXReYBL9AeseDWUJyi4THuksBJcu9F0Pih69Ak150VDnqbVnXg== + "@xstate/react@^3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@xstate/react/-/react-3.2.2.tgz#ddf0f9d75e2c19375b1e1b7335e72cb99762aed8" @@ -2652,6 +2715,11 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +animejs@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/animejs/-/animejs-3.2.2.tgz#59be98c58834339d5847f4a70ddba74ac75b6afc" + integrity sha512-Ao95qWLpDPXXM+WrmwcKbl6uNlC5tjnowlaRYtuVDHHoygjtIPfDUoK9NthrlZsQSKjZXlmji2TrBUAVbiH0LQ== + ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" @@ -2911,16 +2979,16 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^10.4.0: - version "10.4.2" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.2.tgz#25e1df09a31a9fba5c40b578936b90d35c9d4d3b" - integrity sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ== +autoprefixer@latest: + version "10.4.20" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.20.tgz#5caec14d43976ef42e32dcb4bd62878e96be5b3b" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== dependencies: - browserslist "^4.19.1" - caniuse-lite "^1.0.30001297" - fraction.js "^4.1.2" + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" normalize-range "^0.1.2" - picocolors "^1.0.0" + picocolors "^1.0.1" postcss-value-parser "^4.2.0" available-typed-arrays@^1.0.5: @@ -3220,6 +3288,16 @@ browserslist@^4.17.3, browserslist@^4.17.5, browserslist@^4.19.1: node-releases "^2.0.1" picocolors "^1.0.0" +browserslist@^4.23.3: + version "4.24.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" + integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -3237,6 +3315,14 @@ builtins@^1.0.3: resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= +bun-types@1.1.37: + version "1.1.37" + resolved "https://registry.yarnpkg.com/bun-types/-/bun-types-1.1.37.tgz#8caab7fa0dd1490a368c5e4dd0614d500e15e7e9" + integrity sha512-C65lv6eBr3LPJWFZ2gswyrGZ82ljnH8flVE03xeXxKhi2ZGtFiO4isRKTKnitbSqtRAcaqYSR6djt1whI66AbA== + dependencies: + "@types/node" "~20.12.8" + "@types/ws" "~8.5.10" + byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" @@ -3331,11 +3417,16 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001297, caniuse-lite@^1.0.30001312: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001312: version "1.0.30001618" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz" integrity sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg== +caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: + version "1.0.30001690" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" + integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== + canvas-confetti@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/canvas-confetti/-/canvas-confetti-1.9.3.tgz#ef4c857420ad8045ab4abe8547261c8cdf229845" @@ -3408,7 +3499,7 @@ chokidar@^3.3.0, chokidar@^3.4.2: optionalDependencies: fsevents "~2.3.2" -chokidar@^3.5.3: +chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -3556,6 +3647,13 @@ codemirror-lang-jq@^1.0.0: "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" +codemirror-readonly-ranges@^0.1.0-alpha.2: + version "0.1.0-alpha.2" + resolved "https://registry.yarnpkg.com/codemirror-readonly-ranges/-/codemirror-readonly-ranges-0.1.0-alpha.2.tgz#90cf1245d81efb60e8b87b5511211b7be8141d0f" + integrity sha512-PjT/gDAn9cm7wN/YigxgBMsxYbO52bvPQLbN8dXG9seHNANNE9KELteFaS00/+1UR4fAnCq7Ueh+KmRTlPgFTw== + dependencies: + range-analyzer ">= 0.1.1-alpha.1" + codemirror-spell-checker@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz#1c660f9089483ccb5113b9ba9ca19c3f4993371e" @@ -3563,13 +3661,6 @@ codemirror-spell-checker@1.1.2: dependencies: typo-js "*" -codemirror6-abap@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/codemirror6-abap/-/codemirror6-abap-0.1.3.tgz#76a0ebdfbcbdbad5ba0ee6f78d95635ecefa1445" - integrity sha512-eewTbvm+8HnTjtEi3hcMCHbid6ICyGo60hl5/NOeh/2gdOmhzgaDRpkt4DzNxw8q22LJyXi9K4jXNujLREDhBw== - dependencies: - "@codemirror/stream-parser" "^0.19.0" - codemirror@^5.63.1: version "5.65.1" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.1.tgz#5988a812c974c467f964bcc1a00c944e373de502" @@ -4192,6 +4283,11 @@ diff@5.0.0: resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== +diff@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" + integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -4344,6 +4440,11 @@ electron-to-chromium@^1.4.71: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz#17056914465da0890ce00351a3b946fd4cd51ff6" integrity sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw== +electron-to-chromium@^1.5.73: + version "1.5.76" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.76.tgz#db20295c5061b68f07c8ea4dfcbd701485d94a3d" + integrity sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ== + emittery@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" @@ -4390,6 +4491,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== +entities@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" @@ -4618,6 +4724,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -4971,7 +5082,7 @@ fast-glob@^3.2.5, fast-glob@^3.2.7, fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.3.0: +fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -5156,10 +5267,10 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -fraction.js@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8" - integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA== +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fragment-cache@^0.2.1: version "0.2.1" @@ -5501,6 +5612,15 @@ graphql@^15.3.0: resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== +happy-dom@^15.11.7: + version "15.11.7" + resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-15.11.7.tgz#db9854f11e5dd3fd4ab20cbbcfdf7bd9e17cd971" + integrity sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg== + dependencies: + entities "^4.5.0" + webidl-conversions "^7.0.0" + whatwg-mimetype "^3.0.0" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -5621,7 +5741,12 @@ highlight.js@11.2.0: resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.2.0.tgz#a7e3b8c1fdc4f0538b93b2dc2ddd53a40c6ab0f0" integrity sha512-JOySjtOEcyG8s4MLR2MNbLUyaXqUunmSnL2kdV/KuGJOmHZuAR5xC54Ko7goAXBWNhf09Vy3B+U7vR62UZ/0iw== -highlight.js@11.9.0, highlight.js@^11.9.0: +highlight.js@^11.10.0: + version "11.11.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585" + integrity sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w== + +highlight.js@^11.9.0: version "11.9.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.9.0.tgz#04ab9ee43b52a41a047432c8103e2158a1b8b5b0" integrity sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw== @@ -5772,6 +5897,20 @@ husky@^8.0.0: resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== +i18next-resources-to-backend@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/i18next-resources-to-backend/-/i18next-resources-to-backend-1.2.1.tgz#fded121e63e3139ce839c9901b9449dbbea7351d" + integrity sha512-okHbVA+HZ7n1/76MsfhPqDou0fptl2dAlhRDu2ideXloRRduzHsqDOznJBef+R3DFZnbvWoBW+KxJ7fnFjd6Yw== + dependencies: + "@babel/runtime" "^7.23.2" + +i18next@^23.16.6: + version "23.16.8" + resolved "https://registry.yarnpkg.com/i18next/-/i18next-23.16.8.tgz#3ae1373d344c2393f465556f394aba5a9233b93a" + integrity sha512-06r/TitrM88Mg5FdUXAKL96dJMzgqLE5dv3ryBAra4KCwD9mJ4ndOTS95ZuymIGoE+2hzfdaMak2X11/es7ZWg== + dependencies: + "@babel/runtime" "^7.23.2" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -5825,6 +5964,11 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= +immer@^10.1.1: + version "10.1.1" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.1.1.tgz#206f344ea372d8ea176891545ee53ccc062db7bc" + integrity sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -6027,6 +6171,13 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.2" +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + is-core-module@^2.2.0: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" @@ -6848,10 +6999,10 @@ jest@27: import-local "^3.0.2" jest-cli "^27.4.7" -jiti@^1.21.0: - version "1.21.6" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" - integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== +jiti@^1.21.6: + version "1.21.7" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" + integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== jquery@^3.2.1: version "3.6.0" @@ -7022,18 +7173,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -lang-julia@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/lang-julia/-/lang-julia-0.1.0.tgz#7a7fa9262bd6d9146b4208cd5a8e1e448cb4ca73" - integrity sha512-wn+KzHfYeznohwugBQ6mXEC1ug1OHaN3BJ2yymhi+A7s3h7Mo3OS94ZXmTgu/upuDwvM7MEj0WSmETxMls7n2w== - dependencies: - "@codemirror/autocomplete" "^0.19.0" - "@codemirror/highlight" "^0.19.0" - "@codemirror/language" "^0.19.0" - "@codemirror/state" "^0.19.0" - "@lezer/common" "^0.15.0" - lezer-julia "^0.1.0" - latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" @@ -7074,14 +7213,6 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -lezer-julia@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/lezer-julia/-/lezer-julia-0.1.1.tgz#962498a9f506923998b23f771103854d2eeac5d4" - integrity sha512-n27PSx669B/WyyP4aIy9eFvSLVESS0Ee71nZGWQTQCj3Rs+B6ESOmgkd11X5XE0p9WILTFPHOf1/NAXuEUiJgQ== - dependencies: - "@lezer/common" "^0.15.0" - "@lezer/lr" "^0.15.0" - libcipm@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" @@ -7228,16 +7359,16 @@ lilconfig@^2.0.3, lilconfig@^2.0.4: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== -lilconfig@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" - integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== - lilconfig@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== +lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -7327,6 +7458,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -7543,7 +7679,7 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.2.3" -micromatch@^4.0.4, micromatch@^4.0.5: +micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -7750,7 +7886,7 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^3.3.6, nanoid@^3.3.7: +nanoid@^3.3.7: version "3.3.7" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== @@ -7835,6 +7971,11 @@ node-releases@^2.0.1: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + node-releases@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" @@ -8580,7 +8721,7 @@ picocolors@^0.2.1: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f" integrity sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA== -picocolors@^1.0.0, picocolors@^1.1.0: +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== @@ -8735,7 +8876,7 @@ postcss-load-config@^3.0.0: lilconfig "^2.0.4" yaml "^1.10.2" -postcss-load-config@^4.0.1: +postcss-load-config@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.2.tgz#7159dcf626118d33e299f485d6afe4aff7c4a3e3" integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== @@ -8793,7 +8934,7 @@ postcss-minify-selectors@^5.1.3: dependencies: postcss-selector-parser "^6.0.5" -postcss-nested@^6.0.1: +postcss-nested@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-6.2.0.tgz#4c2d22ab5f20b9cb61e2c5c5915950784d068131" integrity sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== @@ -8917,14 +9058,6 @@ postcss-selector-parser@^6.0.10: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: version "6.0.9" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" @@ -8933,6 +9066,14 @@ postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector cssesc "^3.0.0" util-deprecate "^1.0.2" +postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss-svgo@^5.0.4: version "5.0.4" resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.4.tgz#cfa8682f47b88f7cd75108ec499e133b43102abf" @@ -8961,24 +9102,15 @@ postcss@^7.0.1: picocolors "^0.2.1" source-map "^0.6.1" -postcss@^8.4.23: - version "8.4.47" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.47.tgz#5bf6c9a010f3e724c503bf03ef7947dcb0fea365" - integrity sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ== +postcss@^8.4.47, postcss@latest: + version "8.4.49" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" + integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== dependencies: nanoid "^3.3.7" - picocolors "^1.1.0" + picocolors "^1.1.1" source-map-js "^1.2.1" -postcss@^8.4.5: - version "8.4.29" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.29.tgz#33bc121cf3b3688d4ddef50be869b2a54185a1dd" - integrity sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -9084,7 +9216,7 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.5.0, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.5.0, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -9194,6 +9326,11 @@ raf@^3.4.1: dependencies: performance-now "^2.1.0" +"range-analyzer@>= 0.1.1-alpha.1": + version "0.1.1-alpha.2" + resolved "https://registry.yarnpkg.com/range-analyzer/-/range-analyzer-0.1.1-alpha.2.tgz#2e8bf334fe3f53391a5e69cd157a3af7af85ef58" + integrity sha512-Ad9J4t3zljH/DHNSDthAFyQdd5DniHTaqES/oTwAFB7prV7E4u01et6WYCpqbJSmUDC05XlMMR2ycO84Hi1IvA== + rc@^1.0.1, rc@^1.1.6: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -9224,13 +9361,13 @@ react-async-script@^1.1.1: hoist-non-react-statics "^3.3.0" prop-types "^15.5.0" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" react-error-boundary@^3.1.0: version "3.1.4" @@ -9333,10 +9470,10 @@ react-transition-group@^4.3.0: loose-envify "^1.4.0" prop-types "^15.6.2" -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== +react@^18.3.1: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== dependencies: loose-envify "^1.1.0" @@ -9664,7 +9801,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.7, resolve@^1.22.2: +resolve@^1.1.7: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -9682,6 +9819,15 @@ resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.8: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.3: version "2.0.0-next.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" @@ -9792,10 +9938,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== dependencies: loose-envify "^1.1.0" @@ -9986,7 +10132,7 @@ sorted-union-stream@~2.1.3: from2 "^1.3.0" stream-iterate "^1.1.0" -source-map-js@^1.0.2, source-map-js@^1.2.1: +source-map-js@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== @@ -10181,6 +10327,11 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" +string-similarity-js@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/string-similarity-js/-/string-similarity-js-2.1.4.tgz#73716330691946f2ebc435859aba8327afd31307" + integrity sha512-uApODZNjCHGYROzDSAdCmAHf60L/pMDHnP/yk6TAbvGg7JSPZlSto/ceCI7hZEqzc53/juU2aOJFkM2yUVTMTA== + "string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -10369,7 +10520,7 @@ stylis@4.2.0: resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== -sucrase@^3.32.0: +sucrase@^3.35.0: version "3.35.0" resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== @@ -10445,33 +10596,33 @@ table@^6.0.9: string-width "^4.2.3" strip-ansi "^6.0.1" -tailwindcss@^3.4.14: - version "3.4.14" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.14.tgz#6dd23a7f54ec197b19159e91e3bb1e55e7aa73ac" - integrity sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA== +tailwindcss@latest: + version "3.4.17" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.4.17.tgz#ae8406c0f96696a631c790768ff319d46d5e5a63" + integrity sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== dependencies: "@alloc/quick-lru" "^5.2.0" arg "^5.0.2" - chokidar "^3.5.3" + chokidar "^3.6.0" didyoumean "^1.2.2" dlv "^1.1.3" - fast-glob "^3.3.0" + fast-glob "^3.3.2" glob-parent "^6.0.2" is-glob "^4.0.3" - jiti "^1.21.0" - lilconfig "^2.1.0" - micromatch "^4.0.5" + jiti "^1.21.6" + lilconfig "^3.1.3" + micromatch "^4.0.8" normalize-path "^3.0.0" object-hash "^3.0.0" - picocolors "^1.0.0" - postcss "^8.4.23" + picocolors "^1.1.1" + postcss "^8.4.47" postcss-import "^15.1.0" postcss-js "^4.0.1" - postcss-load-config "^4.0.1" - postcss-nested "^6.0.1" - postcss-selector-parser "^6.0.11" - resolve "^1.22.2" - sucrase "^3.32.0" + postcss-load-config "^4.0.2" + postcss-nested "^6.2.0" + postcss-selector-parser "^6.1.2" + resolve "^1.22.8" + sucrase "^3.35.0" tar@^4.4.10, tar@^4.4.12, tar@^4.4.19: version "4.4.19" @@ -10660,6 +10811,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -10725,6 +10881,14 @@ typescript@^4.0.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== +typewriter-effect@^2.21.0: + version "2.21.0" + resolved "https://registry.yarnpkg.com/typewriter-effect/-/typewriter-effect-2.21.0.tgz#7150f12fd2c188248ab2b2b031f77c0663d24c54" + integrity sha512-Y3VL1fuJpUBj0gS4OTXBLzy1gnYTYaBuVuuO99tGNyTkkub5CXi+b/hsV7Og9fp6HlhogOwWJwgq7iXI5sQlEg== + dependencies: + prop-types "^15.8.1" + raf "^3.4.1" + typo-js@*: version "1.2.1" resolved "https://registry.yarnpkg.com/typo-js/-/typo-js-1.2.1.tgz#334a0d8c3f6c56f2f1e15fdf6c31677793cbbe9b" @@ -10760,6 +10924,11 @@ underscore@^1.8.3: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.2.tgz#276cea1e8b9722a8dbed0100a407dda572125881" integrity sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" @@ -10842,6 +11011,14 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= +update-browserslist-db@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz#80846fba1d79e82547fb661f8d141e0945755fe5" + integrity sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.0" + update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" @@ -11022,6 +11199,11 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -11039,6 +11221,11 @@ whatwg-mimetype@^2.3.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -11348,3 +11535,8 @@ yargs@^8.0.2: which-module "^2.0.0" y18n "^3.2.1" yargs-parser "^7.0.0" + +zustand@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-5.0.2.tgz#f7595ada55a565f1fd6464f002a91e701ee0cfca" + integrity sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw== From d06b0046a527c85dfa61c793cb04dead1409d81c Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Mon, 30 Dec 2024 18:09:20 +0000 Subject: [PATCH 06/38] Fix shizzle --- yarn.lock | 7332 +++++++++++++++++++++++++++-------------------------- 1 file changed, 3696 insertions(+), 3636 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3204f48789..16dc7a0e42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,24 @@ # yarn lockfile v1 +"@adobe/css-tools@^4.0.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.1.tgz#2447a230bfe072c1659e6815129c03cf170710e3" + integrity sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ== + "@alloc/quick-lru@^5.2.0": version "5.2.0" resolved "https://registry.yarnpkg.com/@alloc/quick-lru/-/quick-lru-5.2.0.tgz#7bf68b20c0a350f936915fcae06f58e32007ce30" integrity sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -14,412 +27,258 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/highlight" "^7.16.7" + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4", "@babel/compat-data@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" - integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" + integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== "@babel/core@^7.1.0", "@babel/core@^7.12.17", "@babel/core@^7.12.3", "@babel/core@^7.14.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.16.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" - integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.12" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.10" - "@babel/types" "^7.16.8" - convert-source-map "^1.7.0" + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" + convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.16.8", "@babel/generator@^7.7.2": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" - integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== - dependencies: - "@babel/types" "^7.16.8" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz#8a6959b9cc818a88815ba3c5474619e9c0f2c21c" - integrity sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-create-regexp-features-plugin@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" - integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.0", "@babel/generator@^7.26.3", "@babel/generator@^7.7.2": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.3.tgz#ab8d4360544a425c90c248df7059881f4b2ce019" + integrity sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ== + dependencies: + "@babel/parser" "^7.26.3" + "@babel/types" "^7.26.3" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz#55af025ce365be3cdc0c1c1e56c6af617ce88875" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== + dependencies: + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz#7644147706bb90ff613297d49ed5266bde729f83" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.26.3.tgz#5169756ecbe1d95f7866b90bb555b022595302a0" + integrity sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.2", "@babel/helper-define-polyfill-provider@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.3.tgz#f4f2792fae2ef382074bc2d713522cf24e6ddb21" + integrity sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg== dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== dependencies: - "@babel/types" "^7.16.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== +"@babel/helper-module-imports@^7.16.7", "@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== dependencies: - "@babel/types" "^7.16.7" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" - integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz#9cbdd63a9443a2c92a725cca7ebca12cc8dd9f46" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz#ba447224798c3da3f8713fc272b145e33da6a5c5" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helpers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.0.tgz#30e621f1eba5aa45fe6f4868d2e9154d884119a4" + integrity sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw== dependencies: - "@babel/types" "^7.16.7" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.0" -"@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== +"@babel/highlight@^7.10.4": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.25.9.tgz#8141ce68fc73757946f983b343f1231f4691acc6" + integrity sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw== dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz#29ffaade68a367e2ed09c90901986918d25e57e3" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" - integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-member-expression-to-functions" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz#58afda087c4cd235de92f7ceedebca2c41274200" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" - integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" + "@babel/helper-validator-identifier" "^7.25.9" + chalk "^2.4.2" js-tokens "^4.0.0" + picocolors "^1.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12", "@babel/parser@^7.16.7": - version "7.16.12" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" - integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" - integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" - integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - -"@babel/plugin-proposal-async-generator-functions@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz#3bdd1ebbe620804ea9416706cd67d60787504bc8" - integrity sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" - integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-class-static-block@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" - integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" - integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" - integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" - integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" + integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/types" "^7.26.3" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" - integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-proposal-object-rest-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" - integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" -"@babel/plugin-proposal-optional-chaining@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" - integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-proposal-private-methods@^7.16.11": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz#e8df108288555ff259f4527dbe84813aac3a1c50" - integrity sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.10" - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-proposal-private-property-in-object@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" - integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" - integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" @@ -435,7 +294,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -449,21 +308,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-dynamic-import@^7.0.0-beta.42", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7.0.0-beta.42": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -477,14 +343,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz#50b6571d13f764266a113d77c82b4a6508bbe665" - integrity sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q== +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -498,7 +364,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -533,489 +399,614 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.16.7", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== +"@babel/plugin-syntax-typescript@^7.25.9", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-arrow-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" - integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz#b83dff4b970cf41f1b819f8b49cc0cfbaa53a808" - integrity sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg== +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-remap-async-to-generator" "^7.16.8" - -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-block-scoping@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" - integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/plugin-transform-classes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" - integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz#1b18530b077d18a407c494eb3d1d72da505283a2" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz#5700691dbd7abb93de300ca7be94203764fce458" + integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz#c33665e46b06759c93687ca0f84395b80c0473a1" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" - integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" -"@babel/plugin-transform-destructuring@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" - integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-keys@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" - integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-for-of@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" - integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== +"@babel/plugin-transform-exponentiation-operator@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" - integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz#4bdc7d42a213397905d89f02350c5267866d5755" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-modules-amd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" - integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.12.13", "@babel/plugin-transform-modules-commonjs@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz#cdee19aae887b16b9d331009aa9a219af7c86afe" - integrity sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA== +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-systemjs@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" - integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-umd@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" - integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-named-capturing-groups-regex@^7.16.8": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz#7f860e0e40d844a02c9dcf9d84965e7dfd666252" - integrity sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw== +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-new-target@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" - integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== +"@babel/plugin-transform-modules-commonjs@^7.12.13", "@babel/plugin-transform-modules-commonjs@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-parameters@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" - integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-display-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz#7b6d40d232f4c0f550ea348593db3b21e2404340" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz#43a00724a3ed2557ed3f276a01a929e6686ac7b8" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz#86a6a220552afd0e4e1f0388a68a372be7add0d4" - integrity sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag== +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz#bcb1b0d9e948168102d5f7104375ca21c3266949" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-jsx" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz#232bfd2f12eb551d6d7d01d13fe3f86b45eb9c67" - integrity sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA== +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-regenerator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" - integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== dependencies: - regenerator-transform "^0.14.2" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-reserved-words@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" - integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz#4b79746b59efa1f38c8695065a92a9f5afb24f7d" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz#8fd220a77dd139c07e25225a903b8be8c829e0d7" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.25.9" + +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz#06367940d8325b36edff5e2b9cbe782947ca4166" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz#ea1c11b2f9dbb8e2d97025f43a3b5bc47e18ae62" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz#03a8a4670d6cebae95305ac6defac81ece77740b" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-runtime@^7.14.3": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz#53d9fd3496daedce1dd99639097fa5d14f4c7c2c" - integrity sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w== + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz#62723ea3f5b31ffbe676da9d6dae17138ae580ea" + integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - semver "^6.3.0" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-spread@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" - integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-template-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" - integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== +"@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz#6dbd4a24e8fad024df76d1fac6a03cf413f60fe1" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typeof-symbol@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" - integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== +"@babel/plugin-transform-typeof-symbol@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz#224ba48a92869ddbf81f9b4a5f1204bbf5a2bc4b" + integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typescript@^7.16.7": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz#591ce9b6b83504903fa9dd3652c357c2ba7a1ee0" - integrity sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ== +"@babel/plugin-transform-typescript@^7.25.9": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz#3d6add9c78735623317387ee26d5ada540eee3fd" + integrity sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-typescript" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/preset-env@^7.14.2": - version "7.16.11" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.11.tgz#5dd88fd885fae36f88fd7c8342475c9f0abe2982" - integrity sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g== - dependencies: - "@babel/compat-data" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-async-generator-functions" "^7.16.8" - "@babel/plugin-proposal-class-properties" "^7.16.7" - "@babel/plugin-proposal-class-static-block" "^7.16.7" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.16.7" - "@babel/plugin-proposal-json-strings" "^7.16.7" - "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.16.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.16.7" - "@babel/plugin-proposal-private-methods" "^7.16.11" - "@babel/plugin-proposal-private-property-in-object" "^7.16.7" - "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.16.7" - "@babel/plugin-transform-async-to-generator" "^7.16.8" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.16.7" - "@babel/plugin-transform-classes" "^7.16.7" - "@babel/plugin-transform-computed-properties" "^7.16.7" - "@babel/plugin-transform-destructuring" "^7.16.7" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.16.7" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.16.7" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.16.7" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.16.7" - "@babel/plugin-transform-modules-commonjs" "^7.16.8" - "@babel/plugin-transform-modules-systemjs" "^7.16.7" - "@babel/plugin-transform-modules-umd" "^7.16.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.8" - "@babel/plugin-transform-new-target" "^7.16.7" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.16.7" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.16.7" - "@babel/plugin-transform-reserved-words" "^7.16.7" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.16.7" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.16.7" - "@babel/plugin-transform-typeof-symbol" "^7.16.7" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.16.8" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.20.2" - semver "^6.3.0" +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@^7.14.2": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.0.tgz#30e5c6bc1bcc54865bff0c5a30f6d4ccdc7fa8b1" + integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== + dependencies: + "@babel/compat-data" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.25.9" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.25.9" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.25.9" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.38.1" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" esutils "^2.0.2" "@babel/preset-react@^7.13.13": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.16.7.tgz#4c18150491edc69c183ff818f9f2aecbe5d93852" - integrity sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA== + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.26.3.tgz#7c5e028d623b4683c1f83a0bd4713b9100560caa" + integrity sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.16.7" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" "@babel/preset-typescript@^7.13.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz#ab114d68bb2020afc069cd51b37ff98a046a70b9" - integrity sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.16.7" - -"@babel/runtime@^7.10.5", "@babel/runtime@^7.12.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.7": - version "7.23.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" - integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" - integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz#4a570f1b8d104a242d923957ffa1eaff142a106d" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== dependencies: - regenerator-runtime "^0.13.4" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" -"@babel/runtime@^7.23.2": +"@babel/runtime@^7.10.5", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.3", "@babel/runtime@^7.23.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.16.7", "@babel/template@^7.3.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.16.8", "@babel/traverse@^7.7.2": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" - integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.10" - "@babel/types" "^7.16.8" - debug "^4.1.0" +"@babel/template@^7.25.9", "@babel/template@^7.3.3": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" + integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.7.2": + version "7.26.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.4.tgz#ac3a2a84b908dde6d463c3bfa2c5fdc1653574bd" + integrity sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.3" + "@babel/parser" "^7.26.3" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.3" + debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" - integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.3", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" + integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" "@ballerina/highlightjs-ballerina@^1.0.1": version "1.0.1" @@ -1027,17 +1018,17 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@bugsnag/browser@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@bugsnag/browser/-/browser-7.16.0.tgz#c72d956ade84db0707a40412fff9cf8bf8c8d2d1" - integrity sha512-lVNVgGcesc2M8DJoy2i3e1iaFmPI5WfFU9vzmRrZN3MGXHMn/JYpHwl0cIjbQOOqmV4W7l3/8jshWXtgDDDTaw== +"@bugsnag/browser@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@bugsnag/browser/-/browser-7.25.0.tgz#aa56a8e138dfff268ac29c5fe374cfc3c9b42a76" + integrity sha512-PzzWy5d9Ly1CU1KkxTB6ZaOw/dO+CYSfVtqxVJccy832e6+7rW/dvSw5Jy7rsNhgcKSKjZq86LtNkPSvritOLA== dependencies: - "@bugsnag/core" "^7.16.0" + "@bugsnag/core" "^7.25.0" -"@bugsnag/core@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@bugsnag/core/-/core-7.16.0.tgz#5f21be75325b8193faf0953cc79fa2f97576b1d2" - integrity sha512-nqf1DteuQ+4+qQFIYn1aNaw58TS0PlVNkOxtJomOyKK+XGwEPHl/oae7XNmxpVujmnXRZPztFfD3AvTVlRlwWA== +"@bugsnag/core@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@bugsnag/core/-/core-7.25.0.tgz#ee4dbc66dba4adc65717a3a8bf05dca55790e218" + integrity sha512-JZLak1b5BVzy77CPcklViZrppac/pE07L3uSDmfSvFYSCGReXkik2txOgV05VlF9EDe36dtUAIIV7iAPDfFpQQ== dependencies: "@bugsnag/cuid" "^3.0.0" "@bugsnag/safe-json-stringify" "^6.0.0" @@ -1046,24 +1037,24 @@ stack-generator "^2.0.3" "@bugsnag/cuid@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@bugsnag/cuid/-/cuid-3.0.0.tgz#2ee7642a30aee6dc86f5e7f824653741e42e5c35" - integrity sha512-LOt8aaBI+KvOQGneBtpuCz3YqzyEAehd1f3nC5yr9TIYW1+IzYKa2xWS4EiMz5pPOnRPHkyyS5t/wmSmN51Gjg== + version "3.1.1" + resolved "https://registry.yarnpkg.com/@bugsnag/cuid/-/cuid-3.1.1.tgz#dbd5d76559f6b7a66306fceacf503888883da514" + integrity sha512-d2z4b0rEo3chI07FNN1Xds8v25CNeekecU6FC/2Fs9MxY2EipkZTThVcV2YinMn8dvRUlViKOyC50evoUxg8tw== "@bugsnag/js@^7.10.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@bugsnag/js/-/js-7.16.0.tgz#63215a9606df6635ed706b96e30515b5183edc8b" - integrity sha512-0PVzQatQZDcD8ajPVWnd4tpZCJrM6H56Z9HJEkF35iehkWdCdJR2T22dba2SJ46sgV/YYeQqNkBpg9j9QcBCxw== + version "7.25.0" + resolved "https://registry.yarnpkg.com/@bugsnag/js/-/js-7.25.0.tgz#339d5c4815a8c141a4056759184636a64404ad89" + integrity sha512-d8n8SyKdRUz8jMacRW1j/Sj/ckhKbIEp49+Dacp3CS8afRgfMZ//NXhUFFXITsDP5cXouaejR9fx4XVapYXNgg== dependencies: - "@bugsnag/browser" "^7.16.0" - "@bugsnag/node" "^7.16.0" + "@bugsnag/browser" "^7.25.0" + "@bugsnag/node" "^7.25.0" -"@bugsnag/node@^7.16.0": - version "7.16.0" - resolved "https://registry.yarnpkg.com/@bugsnag/node/-/node-7.16.0.tgz#276f0d0a5fd4cd5536269d896bfd533a7dafd2ce" - integrity sha512-Iyl62gZ1Rl3o8VVSKgmqOFSTJwAKrE106WQ3oAlzWLs5Px91hKnMrxEnV3IrOVZagTy+TowNKgBKs9tk3zXo1Q== +"@bugsnag/node@^7.25.0": + version "7.25.0" + resolved "https://registry.yarnpkg.com/@bugsnag/node/-/node-7.25.0.tgz#ce00920ce290333114f33e5167397c6b1657cb47" + integrity sha512-KlxBaJ8EREEsfKInybAjTO9LmdDXV3cUH5+XNXyqUZrcRVuPOu4j4xvljh+n24ifok/wbFZTKVXUzrN4iKIeIA== dependencies: - "@bugsnag/core" "^7.16.0" + "@bugsnag/core" "^7.25.0" byline "^5.0.0" error-stack-parser "^2.0.2" iserror "^0.0.2" @@ -1071,9 +1062,9 @@ stack-generator "^2.0.3" "@bugsnag/plugin-react@^7.19.0": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@bugsnag/plugin-react/-/plugin-react-7.19.0.tgz#3f86c6ed2745cd60a4099d0e14ca46f2b9cf501f" - integrity sha512-owC4QXYJWGllMoOPcH5P7sbDIDuFLMCbjGAU6FwH5mBMObSQo+1ViSKImlTJQUFXATM8ySISTBVt7w3C6FFHng== + version "7.25.0" + resolved "https://registry.yarnpkg.com/@bugsnag/plugin-react/-/plugin-react-7.25.0.tgz#20c9252b399586d9588ec28320c3da1f89854031" + integrity sha512-evlH2Aai7vBQsTNt1sP0Pq7uwCdaQR6DOwrZmfA6W6h0eJzTDdlq1jl94NbfHTIMM62zGcDx6ZT/1Q87utnvtA== "@bugsnag/safe-json-stringify@^6.0.0": version "6.0.0" @@ -1088,17 +1079,7 @@ exec-sh "^0.3.2" minimist "^1.2.0" -"@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.3.2": - version "6.15.0" - resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.15.0.tgz#37bc320f20cdda332d6bf4d1fc7f300f8fc5f04c" - integrity sha512-G2Zm0mXznxz97JhaaOdoEG2cVupn4JjPaS4AcNvZzhOsnnG9YVN68VzfoUw6dYTsIxT6a/cmoFEN47KAWhXaOg== - dependencies: - "@codemirror/language" "^6.0.0" - "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.17.0" - "@lezer/common" "^1.0.0" - -"@codemirror/autocomplete@^6.10.2": +"@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.10.2", "@codemirror/autocomplete@^6.15.0", "@codemirror/autocomplete@^6.3.2": version "6.18.4" resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.18.4.tgz#4394f55d6771727179f2e28a871ef46bbbeb11b1" integrity sha512-sFAphGQIqyQZfP2ZBsSHV7xQvo9Py0rV0dW7W3IMRdS+zDuNb2l3no78CvUaWKGfzFjI4FTrLdUSj86IGb2hRA== @@ -1108,27 +1089,7 @@ "@codemirror/view" "^6.17.0" "@lezer/common" "^1.0.0" -"@codemirror/autocomplete@^6.15.0": - version "6.16.0" - resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.16.0.tgz#595eb30099ba91a835ed65ed8ff7497388f604b3" - integrity sha512-P/LeCTtZHRTCU4xQsa89vSKWecYv1ZqwzOd5topheGRf+qtacFgBeIMQi3eL8Kt/BUNvxUWkx+5qP2jlGoARrg== - dependencies: - "@codemirror/language" "^6.0.0" - "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.17.0" - "@lezer/common" "^1.0.0" - -"@codemirror/commands@^6.0.0": - version "6.3.3" - resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.3.3.tgz#03face5bf5f3de0fc4e09b177b3c91eda2ceb7e9" - integrity sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A== - dependencies: - "@codemirror/language" "^6.0.0" - "@codemirror/state" "^6.4.0" - "@codemirror/view" "^6.0.0" - "@lezer/common" "^1.1.0" - -"@codemirror/commands@^6.7.1": +"@codemirror/commands@^6.0.0", "@codemirror/commands@^6.7.1": version "6.7.1" resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.7.1.tgz#04561e95bc0779eaa49efd63e916c4efb3bbf6d6" integrity sha512-llTrboQYw5H4THfhN4U3qCnSZ1SOJ60ohhz+SzU0ADGtwlc533DtklQP0vSFaQuCPDn3BPpOd1GbbnUtwNjsrw== @@ -1147,20 +1108,20 @@ "@lezer/cpp" "^1.0.0" "@codemirror/lang-css@^6.0.0": - version "6.2.1" - resolved "https://registry.yarnpkg.com/@codemirror/lang-css/-/lang-css-6.2.1.tgz#5dc0a43b8e3c31f6af7aabd55ff07fe9aef2a227" - integrity sha512-/UNWDNV5Viwi/1lpr/dIXJNWiwDxpw13I4pTUAsNxZdg6E0mI2kTQb0P2iHczg1Tu+H4EBgJR+hYhKiHKko7qg== + version "6.3.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-css/-/lang-css-6.3.1.tgz#763ca41aee81bb2431be55e3cfcc7cc8e91421a3" + integrity sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.0.0" "@lezer/common" "^1.0.2" - "@lezer/css" "^1.0.0" + "@lezer/css" "^1.1.7" "@codemirror/lang-html@^6.0.0": - version "6.4.8" - resolved "https://registry.yarnpkg.com/@codemirror/lang-html/-/lang-html-6.4.8.tgz#961db9b1037efcb1d0f50ae6082e5a367fa1470c" - integrity sha512-tE2YK7wDlb9ZpAH6mpTPiYm6rhfdQKVDa5r9IwIFlwwgvVaKsCfuKKZoJGWsmMZIf3FQAuJ5CHMPLymOtg1hXw== + version "6.4.9" + resolved "https://registry.yarnpkg.com/@codemirror/lang-html/-/lang-html-6.4.9.tgz#d586f2cc9c341391ae07d1d7c545990dfa069727" + integrity sha512-aQv37pIMSlueybId/2PVSP6NPnmurFDVmZwzc7jszd2KAF8qd4VBbvNYPXWQq90WIARjsdVkPbw29pszmHws3Q== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/lang-css" "^6.0.0" @@ -1205,9 +1166,9 @@ "@lezer/php" "^1.0.0" "@codemirror/lang-python@^6.1.5": - version "6.1.5" - resolved "https://registry.yarnpkg.com/@codemirror/lang-python/-/lang-python-6.1.5.tgz#1cb891dd82bbc27ec1c80469218637650bb2143d" - integrity sha512-hCm+8X6wrnXJCGf+QhmFu1AXkdTVG7dHy0Ly6SI1N3SRPptaMvwX6oNQonOXOMPvmcjiB0xq342KAxX3BYpijw== + version "6.1.6" + resolved "https://registry.yarnpkg.com/@codemirror/lang-python/-/lang-python-6.1.6.tgz#0c55e7e2dfa85b68be93b9692e5d3f76f284bbb2" + integrity sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg== dependencies: "@codemirror/autocomplete" "^6.3.2" "@codemirror/language" "^6.8.0" @@ -1224,42 +1185,19 @@ "@lezer/rust" "^1.0.0" "@codemirror/lang-yaml@^6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/@codemirror/lang-yaml/-/lang-yaml-6.1.1.tgz#6f6e4e16c5a4e6d549f462c9dc2053439e070d0d" - integrity sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw== + version "6.1.2" + resolved "https://registry.yarnpkg.com/@codemirror/lang-yaml/-/lang-yaml-6.1.2.tgz#c84280c68fa7af456a355d91183b5e537e9b7038" + integrity sha512-dxrfG8w5Ce/QbT7YID7mWZFKhdhsaTNOYjOkSIMt1qmC4VQnXSDSYVHHHn8k6kJUfIhtLo8t1JJgltlxWdsITw== dependencies: "@codemirror/autocomplete" "^6.0.0" "@codemirror/language" "^6.0.0" "@codemirror/state" "^6.0.0" "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.2.0" - "@lezer/yaml" "^1.0.0" - -"@codemirror/language@^6.0.0", "@codemirror/language@^6.10.1", "@codemirror/language@^6.4.0", "@codemirror/language@^6.6.0", "@codemirror/language@^6.8.0": - version "6.10.1" - resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.1.tgz#428c932a158cb75942387acfe513c1ece1090b05" - integrity sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ== - dependencies: - "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.23.0" - "@lezer/common" "^1.1.0" - "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" - style-mod "^4.0.0" - -"@codemirror/language@^6.10.2": - version "6.10.2" - resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.2.tgz#4056dc219619627ffe995832eeb09cea6060be61" - integrity sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA== - dependencies: - "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.23.0" - "@lezer/common" "^1.1.0" - "@lezer/highlight" "^1.0.0" - "@lezer/lr" "^1.0.0" - style-mod "^4.0.0" + "@lezer/yaml" "^1.0.0" -"@codemirror/language@^6.9.1": +"@codemirror/language@^6.0.0", "@codemirror/language@^6.10.1", "@codemirror/language@^6.4.0", "@codemirror/language@^6.6.0", "@codemirror/language@^6.8.0", "@codemirror/language@^6.9.1": version "6.10.8" resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.8.tgz#3e3a346a2b0a8cf63ee1cfe03349eb1965dce5f9" integrity sha512-wcP8XPPhDH2vTqf181U8MbZnW+tDyPYy0UzVOa+oHORjyT+mhhom9vBd7dApJwoDz9Nb/a8kHjJIsuA/t8vNFw== @@ -1272,31 +1210,31 @@ style-mod "^4.0.0" "@codemirror/legacy-modes@^6.4.0": - version "6.4.0" - resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-6.4.0.tgz#3cf7a863da5deebbd7bf9a90f12f89f06cca6d46" - integrity sha512-5m/K+1A6gYR0e+h/dEde7LoGimMjRtWXZFg4Lo70cc8HzjSdHe3fLwjWMR0VRl5KFT1SxalSap7uMgPKF28wBA== + version "6.4.2" + resolved "https://registry.yarnpkg.com/@codemirror/legacy-modes/-/legacy-modes-6.4.2.tgz#723a55aae21304d4c112575943d3467c9040d217" + integrity sha512-HsvWu08gOIIk303eZQCal4H4t65O/qp1V4ul4zVa3MHK5FJ0gz3qz3O55FIkm+aQUcshUOjBx38t2hPiJwW5/g== dependencies: "@codemirror/language" "^6.0.0" "@codemirror/lint@^6.0.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.5.0.tgz#ea43b6e653dcc5bcd93456b55e9fe62e63f326d9" - integrity sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g== + version "6.8.4" + resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.8.4.tgz#7d8aa5d1a6dec89ffcc23ad45ddca2e12e90982d" + integrity sha512-u4q7PnZlJUojeRe8FJa/njJcMctISGgPQ4PnWsd9268R4ZTtU+tfFYmwkBvgcrK2+QQ8tYFVALVb5fVJykKc5A== dependencies: "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.0.0" + "@codemirror/view" "^6.35.0" crelt "^1.0.5" "@codemirror/search@^6.0.0": - version "6.5.6" - resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.6.tgz#8f858b9e678d675869112e475f082d1e8488db93" - integrity sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q== + version "6.5.8" + resolved "https://registry.yarnpkg.com/@codemirror/search/-/search-6.5.8.tgz#b59b3659b46184cc75d6108d7c050a4ca344c3a0" + integrity sha512-PoWtZvo7c1XFeZWmmyaOp2G0XVbOnm+fJzvghqGAktBW3cufwJUWvSCcNG0ppXiBEM05mZu6RhMtXPv2hpllig== dependencies: "@codemirror/state" "^6.0.0" "@codemirror/view" "^6.0.0" crelt "^1.0.5" -"@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0", "@codemirror/state@^6.5.0": +"@codemirror/state@6.5.0", "@codemirror/state@^6.0.0", "@codemirror/state@^6.4.0", "@codemirror/state@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@codemirror/state/-/state-6.5.0.tgz#e98dde85620618651543152fe1c2483300a0ccc9" integrity sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw== @@ -1313,16 +1251,7 @@ "@codemirror/view" "^6.0.0" "@lezer/highlight" "^1.0.0" -"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0": - version "6.26.2" - resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.26.2.tgz#6df950954cee33933514978c5bbd2da9d546466c" - integrity sha512-j6V48PlFC/O7ERAR5vRW5QKDdchzmyyfojDdt+zPsB0YXoWgcjlC1IWjmlYfx08aQZ3HN5BtALcgGgtSKGMe7A== - dependencies: - "@codemirror/state" "^6.4.0" - style-mod "^4.1.0" - w3c-keyname "^2.2.4" - -"@codemirror/view@^6.24.0", "@codemirror/view@^6.27.0": +"@codemirror/view@^6.0.0", "@codemirror/view@^6.17.0", "@codemirror/view@^6.23.0", "@codemirror/view@^6.24.0", "@codemirror/view@^6.27.0", "@codemirror/view@^6.35.0": version "6.36.1" resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.36.1.tgz#3c543b8fd72c96b30c4b2b1464d1ebce7e0c5c4b" integrity sha512-miD1nyT4m4uopZaDdO2uXU/LLHliKNYL9kB1C1wJHrunHLm/rpkb5QVSokqgw9hFqEZakrdlb/VGWX8aYZTslQ== @@ -1336,16 +1265,16 @@ resolved "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz#2cbcf822bf3764c9658c4d2e568bd0c0cb748016" integrity sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw== -"@emotion/babel-plugin@^11.11.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" - integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== +"@emotion/babel-plugin@^11.13.5": + version "11.13.5" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz#eab8d65dbded74e0ecfd28dc218e75607c4e7bc0" + integrity sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ== dependencies: "@babel/helper-module-imports" "^7.16.7" "@babel/runtime" "^7.18.3" - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/serialize" "^1.1.2" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/serialize" "^1.3.3" babel-plugin-macros "^3.1.0" convert-source-map "^1.5.0" escape-string-regexp "^4.0.0" @@ -1353,76 +1282,81 @@ source-map "^0.5.7" stylis "4.2.0" -"@emotion/cache@^11.11.0", "@emotion/cache@^11.4.0": - version "11.11.0" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" - integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== +"@emotion/cache@^11.14.0", "@emotion/cache@^11.4.0": + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.14.0.tgz#ee44b26986eeb93c8be82bb92f1f7a9b21b2ed76" + integrity sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA== dependencies: - "@emotion/memoize" "^0.8.1" - "@emotion/sheet" "^1.2.2" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" + "@emotion/memoize" "^0.9.0" + "@emotion/sheet" "^1.4.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" stylis "4.2.0" -"@emotion/hash@^0.9.1": - version "0.9.1" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" - integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== +"@emotion/hash@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.2.tgz#ff9221b9f58b4dfe61e619a7788734bd63f6898b" + integrity sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g== -"@emotion/memoize@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" - integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== +"@emotion/memoize@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.9.0.tgz#745969d649977776b43fc7648c556aaa462b4102" + integrity sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ== "@emotion/react@^11.8.1": - version "11.11.1" - resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.11.1.tgz#b2c36afac95b184f73b08da8c214fdf861fa4157" - integrity sha512-5mlW1DquU5HaxjLkfkGN1GA/fvVGdyHURRiX/0FHl2cfIfRxSOfmxEH5YS43edp0OldZrZ+dkBKbngxcNCdZvA== + version "11.14.0" + resolved "https://registry.yarnpkg.com/@emotion/react/-/react-11.14.0.tgz#cfaae35ebc67dd9ef4ea2e9acc6cd29e157dd05d" + integrity sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA== dependencies: "@babel/runtime" "^7.18.3" - "@emotion/babel-plugin" "^11.11.0" - "@emotion/cache" "^11.11.0" - "@emotion/serialize" "^1.1.2" - "@emotion/use-insertion-effect-with-fallbacks" "^1.0.1" - "@emotion/utils" "^1.2.1" - "@emotion/weak-memoize" "^0.3.1" + "@emotion/babel-plugin" "^11.13.5" + "@emotion/cache" "^11.14.0" + "@emotion/serialize" "^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks" "^1.2.0" + "@emotion/utils" "^1.4.2" + "@emotion/weak-memoize" "^0.4.0" hoist-non-react-statics "^3.3.1" -"@emotion/serialize@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51" - integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA== +"@emotion/serialize@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.3.3.tgz#d291531005f17d704d0463a032fe679f376509e8" + integrity sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA== dependencies: - "@emotion/hash" "^0.9.1" - "@emotion/memoize" "^0.8.1" - "@emotion/unitless" "^0.8.1" - "@emotion/utils" "^1.2.1" + "@emotion/hash" "^0.9.2" + "@emotion/memoize" "^0.9.0" + "@emotion/unitless" "^0.10.0" + "@emotion/utils" "^1.4.2" csstype "^3.0.2" -"@emotion/sheet@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" - integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== +"@emotion/sheet@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.4.0.tgz#c9299c34d248bc26e82563735f78953d2efca83c" + integrity sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg== -"@emotion/unitless@^0.8.1": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" - integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== +"@emotion/unitless@^0.10.0": + version "0.10.0" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.10.0.tgz#2af2f7c7e5150f497bdabd848ce7b218a27cf745" + integrity sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg== -"@emotion/use-insertion-effect-with-fallbacks@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz#08de79f54eb3406f9daaf77c76e35313da963963" - integrity sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw== +"@emotion/use-insertion-effect-with-fallbacks@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz#8a8cb77b590e09affb960f4ff1e9a89e532738bf" + integrity sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg== -"@emotion/utils@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" - integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== +"@emotion/utils@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.4.2.tgz#6df6c45881fcb1c412d6688a311a98b7f59c1b52" + integrity sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA== -"@emotion/weak-memoize@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" - integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== +"@emotion/weak-memoize@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz#5e13fac887f08c44f76b0ccaf3370eb00fec9bb6" + integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg== + +"@esbuild/linux-loong64@0.14.54": + version "0.14.54" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" + integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== "@eslint/eslintrc@^0.4.3": version "0.4.3" @@ -1445,13 +1379,13 @@ integrity sha512-oRSlD9o2twN+AwoL8XSYgbxggt8+rgH+n6y84mjXpuC/MsJoQQGG0Y6gkzuJcloLgB1SuBUt87qJunm4lYQzCA== "@exercism/codemirror-lang-arturo@^0.1.6": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@exercism/codemirror-lang-arturo/-/codemirror-lang-arturo-0.1.6.tgz#fd233d9a7b9a77ce160d1f0f6e8117555b7b0dbd" - integrity sha512-hOk76CZ4ED+2wNSEW6ePb92eajdudbadRne7cymtEtVfVM+UvV50VAYaldRIW1gqy31swd9mxefnS4TZ2oYf+A== + version "0.1.7" + resolved "https://registry.yarnpkg.com/@exercism/codemirror-lang-arturo/-/codemirror-lang-arturo-0.1.7.tgz#f4b876feacea7f4a185dc34838c876fa16a89204" + integrity sha512-alNp88QW/Y22/Q4H79NcZb6+KWYRdseJe4fbHl+VrQFmFZmQY7HTDDCPZaBgVFEP4PMf09iAE15id3/k2VY0yw== dependencies: - "@codemirror/language" "^6.10.2" + "@codemirror/language" "^6.10.1" "@lezer/highlight" "^1.2.0" - "@lezer/lr" "^1.4.1" + "@lezer/lr" "^1.4.0" "@exercism/codemirror-lang-gleam@^2.0.1": version "2.0.1" @@ -1498,7 +1432,7 @@ "@exercism/twine2-story-format@https://github.com/exercism/twine2-story-format.git": version "1.0.0" - resolved "https://github.com/exercism/twine2-story-format.git#94ac1ce6a2560f06db4172dd28707b98220b4fb9" + resolved "https://github.com/exercism/twine2-story-format.git#ab0ed60553b2c6f06d51c4f91df35e29ac4ba865" dependencies: jquery "^3.2.1" lz-string "^1.4.4" @@ -1506,13 +1440,6 @@ npm "^6.3.0" underscore "^1.8.3" -"@floating-ui/core@^1.4.2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.5.0.tgz#5c05c60d5ae2d05101c3021c1a2a350ddc027f8c" - integrity sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg== - dependencies: - "@floating-ui/utils" "^0.1.3" - "@floating-ui/core@^1.6.0": version "1.6.8" resolved "https://registry.yarnpkg.com/@floating-ui/core/-/core-1.6.8.tgz#aa43561be075815879305965020f492cdb43da12" @@ -1520,15 +1447,7 @@ dependencies: "@floating-ui/utils" "^0.2.8" -"@floating-ui/dom@^1.0.1": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.5.3.tgz#54e50efcb432c06c23cd33de2b575102005436fa" - integrity sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA== - dependencies: - "@floating-ui/core" "^1.4.2" - "@floating-ui/utils" "^0.1.3" - -"@floating-ui/dom@^1.6.12": +"@floating-ui/dom@^1.0.1", "@floating-ui/dom@^1.6.12": version "1.6.12" resolved "https://registry.yarnpkg.com/@floating-ui/dom/-/dom-1.6.12.tgz#6333dcb5a8ead3b2bf82f33d6bc410e95f54e556" integrity sha512-NP83c0HjokcGVEMeoStg317VD9W7eDlGK7457dMBANbKA6GJZdc7rjujdgqzTaz93jkGgc5P/jeWbaCHnMNc+w== @@ -1536,20 +1455,15 @@ "@floating-ui/core" "^1.6.0" "@floating-ui/utils" "^0.2.8" -"@floating-ui/utils@^0.1.3": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.1.6.tgz#22958c042e10b67463997bd6ea7115fe28cbcaf9" - integrity sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A== - "@floating-ui/utils@^0.2.8": version "0.2.8" resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.8.tgz#21a907684723bbbaa5f0974cf7730bd797eb8e62" integrity sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig== "@gleam-lang/highlight.js-gleam@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@gleam-lang/highlight.js-gleam/-/highlight.js-gleam-1.0.0.tgz#c9868daf7bc04df3477aaa3357c49a27edd3a18a" - integrity sha512-PNtTN5u7yQgo3uj+vm4SkZ2dbH+ozVMlsbaq8KdrNW5OPWsbRsPluSvGrhCkjJ2RVQKBsKK1o8WTjEU1hNTY1A== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@gleam-lang/highlight.js-gleam/-/highlight.js-gleam-1.5.0.tgz#ab9e43b88b2541a697bcf4d67711c7c4a28adcb3" + integrity sha512-rKKpXnfmHVTPuHEogMVvN4DflzKtX6kBXqu1GsVDb0uDf/bvO8Z2VnC0XWUMuKNlxa+poKIjY6geyxTaVZiMFA== "@happy-dom/global-registrator@^15.11.6": version "15.11.7" @@ -1590,14 +1504,13 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@iarna/cli@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz#0f7af5e851afe895104583c4ca07377a8094d641" - integrity sha512-ukITQAqVs2n9HGmn3car/Ir7d3ta650iXhrG7pjr3EWdFmJuuOVWgYsu7ftsSe5VifEFFhjxVuX9+8F7L8hwcA== +"@iarna/cli@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@iarna/cli/-/cli-2.2.0.tgz#02807c8902fa1b515647c304c9c4d6db8aa9783f" + integrity sha512-fn1dwhQuWD/OuM/XZhaEy2GOL5Hta/Dis1ZtER/FAe/BKXTHohD4sxPcYQePHUYmrknD+iV+3uic0M8zH/9sJQ== dependencies: + glob "^7.1.2" signal-exit "^3.0.2" - update-notifier "^2.2.0" - yargs "^8.0.2" "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -1637,142 +1550,156 @@ faker "5.5.3" lodash "4.17.21" -"@jest/console@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.6.tgz#0742e6787f682b22bdad56f9db2a8a77f6a86107" - integrity sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA== +"@jest/console@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" + integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" - jest-message-util "^27.4.6" - jest-util "^27.4.2" + jest-message-util "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" -"@jest/core@^27.4.7": - version "27.4.7" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.7.tgz#84eabdf42a25f1fa138272ed229bcf0a1b5e6913" - integrity sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg== - dependencies: - "@jest/console" "^27.4.6" - "@jest/reporters" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" +"@jest/core@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" + integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/reporters" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" emittery "^0.8.1" exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^27.4.2" - jest-config "^27.4.7" - jest-haste-map "^27.4.6" - jest-message-util "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-resolve-dependencies "^27.4.6" - jest-runner "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - jest-validate "^27.4.6" - jest-watcher "^27.4.6" + graceful-fs "^4.2.9" + jest-changed-files "^27.5.1" + jest-config "^27.5.1" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-resolve-dependencies "^27.5.1" + jest-runner "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" + jest-watcher "^27.5.1" micromatch "^4.0.4" rimraf "^3.0.0" slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/environment@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.6.tgz#1e92885d64f48c8454df35ed9779fbcf31c56d8b" - integrity sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg== +"@jest/environment@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" + integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== dependencies: - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.4.6" + jest-mock "^27.5.1" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" -"@jest/fake-timers@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.6.tgz#e026ae1671316dbd04a56945be2fa251204324e8" - integrity sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A== +"@jest/fake-timers@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" + integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@sinonjs/fake-timers" "^8.0.1" "@types/node" "*" - jest-message-util "^27.4.6" - jest-mock "^27.4.6" - jest-util "^27.4.2" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-util "^27.5.1" -"@jest/globals@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.6.tgz#3f09bed64b0fd7f5f996920258bd4be8f52f060a" - integrity sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw== +"@jest/globals@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" + integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== dependencies: - "@jest/environment" "^27.4.6" - "@jest/types" "^27.4.2" - expect "^27.4.6" + "@jest/environment" "^27.5.1" + "@jest/types" "^27.5.1" + expect "^27.5.1" -"@jest/reporters@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.6.tgz#b53dec3a93baf9b00826abf95b932de919d6d8dd" - integrity sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ== +"@jest/reporters@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" + integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== dependencies: "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/console" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" exit "^0.1.2" glob "^7.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" istanbul-lib-coverage "^3.0.0" istanbul-lib-instrument "^5.1.0" istanbul-lib-report "^3.0.0" istanbul-lib-source-maps "^4.0.0" istanbul-reports "^3.1.3" - jest-haste-map "^27.4.6" - jest-resolve "^27.4.6" - jest-util "^27.4.2" - jest-worker "^27.4.6" + jest-haste-map "^27.5.1" + jest-resolve "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" slash "^3.0.0" source-map "^0.6.0" string-length "^4.0.1" terminal-link "^2.0.0" v8-to-istanbul "^8.1.0" -"@jest/source-map@^27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.4.0.tgz#2f0385d0d884fb3e2554e8f71f8fa957af9a74b6" - integrity sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ== +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" + integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== dependencies: callsites "^3.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" source-map "^0.6.0" -"@jest/test-result@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.6.tgz#b3df94c3d899c040f602cea296979844f61bdf69" - integrity sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ== +"@jest/test-result@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" + integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== dependencies: - "@jest/console" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/console" "^27.5.1" + "@jest/types" "^27.5.1" "@types/istanbul-lib-coverage" "^2.0.0" collect-v8-coverage "^1.0.0" -"@jest/test-sequencer@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz#447339b8a3d7b5436f50934df30854e442a9d904" - integrity sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw== +"@jest/test-sequencer@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" + integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== dependencies: - "@jest/test-result" "^27.4.6" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-runtime "^27.4.6" + "@jest/test-result" "^27.5.1" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-runtime "^27.5.1" "@jest/transform@^26.6.2": version "26.6.2" @@ -1795,21 +1722,21 @@ source-map "^0.6.1" write-file-atomic "^3.0.0" -"@jest/transform@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.6.tgz#153621940b1ed500305eacdb31105d415dc30231" - integrity sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw== +"@jest/transform@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" + integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== dependencies: "@babel/core" "^7.1.0" - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-regex-util "^27.4.0" - jest-util "^27.4.2" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-regex-util "^27.5.1" + jest-util "^27.5.1" micromatch "^4.0.4" pirates "^4.0.4" slash "^3.0.0" @@ -1827,10 +1754,10 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jest/types@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" - integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== +"@jest/types@^27.5.1": + version "27.5.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" + integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" @@ -1838,10 +1765,22 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.2": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -1862,7 +1801,7 @@ resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== -"@jridgewell/trace-mapping@^0.3.24": +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1871,9 +1810,9 @@ "@jridgewell/sourcemap-codec" "^1.4.14" "@lezer/common@^1.0.0", "@lezer/common@^1.0.2", "@lezer/common@^1.1.0", "@lezer/common@^1.2.0", "@lezer/common@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" - integrity sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ== + version "1.2.3" + resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.3.tgz#138fcddab157d83da557554851017c6c1e5667fd" + integrity sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA== "@lezer/cpp@^1.0.0": version "1.1.2" @@ -1884,60 +1823,53 @@ "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" -"@lezer/css@^1.0.0", "@lezer/css@^1.1.0": - version "1.1.8" - resolved "https://registry.yarnpkg.com/@lezer/css/-/css-1.1.8.tgz#11fd456dac53bc899b266778794ed4ca9576a5a4" - integrity sha512-7JhxupKuMBaWQKjQoLtzhGj83DdnZY9MckEOG5+/iLKNK2ZJqKc6hf6uc0HjwCX7Qlok44jBNqZhHKDhEhZYLA== +"@lezer/css@^1.1.0", "@lezer/css@^1.1.7": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@lezer/css/-/css-1.1.9.tgz#404563d361422c5a1fe917295f1527ee94845ed1" + integrity sha512-TYwgljcDv+YrV0MZFFvYFQHCfGgbPMR6nuqLabBdmZoFH3EP1gvw8t0vae326Ne3PszQkbXfVBjCnf3ZVCr0bA== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" "@lezer/highlight@^1.0.0", "@lezer/highlight@^1.1.3", "@lezer/highlight@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.0.tgz#e5898c3644208b4b589084089dceeea2966f7780" - integrity sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.1.tgz#596fa8f9aeb58a608be0a563e960c373cbf23f8b" + integrity sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA== dependencies: "@lezer/common" "^1.0.0" "@lezer/html@^1.3.0": - version "1.3.9" - resolved "https://registry.yarnpkg.com/@lezer/html/-/html-1.3.9.tgz#097150f0fb0d14e274515d3b3e50e7bd4a1d7ebc" - integrity sha512-MXxeCMPyrcemSLGaTQEZx0dBUH0i+RPl8RN5GwMAzo53nTsd/Unc/t5ZxACeQoyPUM5/GkPLRUs2WliOImzkRA== + version "1.3.10" + resolved "https://registry.yarnpkg.com/@lezer/html/-/html-1.3.10.tgz#1be9a029a6fe835c823b20a98a449a630416b2af" + integrity sha512-dqpT8nISx/p9Do3AchvYGV3qYc4/rKr3IBZxlHmpIKam56P47RSHkSF5f13Vu9hebS1jM0HmtJIwLbWz1VIY6w== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" "@lezer/java@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@lezer/java/-/java-1.1.1.tgz#eed8813a5f3eb1a913aa8eaf40d5b20f40dee3d6" - integrity sha512-mt3dX13fRlpY7RlWELYRakanXgmwXsLRCrhstrn+c1sZd7jR2xle46/3heoxGd+oHxnuTnpoyXTyxcLJQs9+mQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/@lezer/java/-/java-1.1.3.tgz#9efd6a29b4142d07f211076a6fb5e8061c85e147" + integrity sha512-yHquUfujwg6Yu4Fd1GNHCvidIvJwi/1Xu2DaKl/pfWIA2c1oXkVvawH3NyXhCaFx4OdlYBVX5wvz2f7Aoa/4Xw== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" "@lezer/javascript@^1.0.0": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@lezer/javascript/-/javascript-1.4.14.tgz#d94bf2b6338c1c458e1e9f79f2caf5063f346c3e" - integrity sha512-GEdUyspTRgc5dwIGebUk+f3BekvqEWVIYsIuAC3pA8e8wcikGwBZRWRa450L0s8noGWuULwnmi4yjxTnYz9PpA== + version "1.4.21" + resolved "https://registry.yarnpkg.com/@lezer/javascript/-/javascript-1.4.21.tgz#8ebf7d1f891c70e3d00864f5a03ac42c75d19492" + integrity sha512-lL+1fcuxWYPURMM/oFZLEDm0XuLN128QPV+VuGtKpeaOGdcl9F2LYC3nh1S9LkPqx9M0mndZFdXCipNAZpzIkQ== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.1.3" "@lezer/lr" "^1.3.0" "@lezer/lr@^1.0.0", "@lezer/lr@^1.1.0", "@lezer/lr@^1.3.0", "@lezer/lr@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.0.tgz#ed52a75dbbfbb0d1eb63710ea84c35ee647cb67e" - integrity sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg== - dependencies: - "@lezer/common" "^1.0.0" - -"@lezer/lr@^1.4.1": - version "1.4.1" - resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.1.tgz#fe25f051880a754e820b28148d90aa2a96b8bdd2" - integrity sha512-CHsKq8DMKBf9b3yXPDIU4DbH+ZJd/sJdYOW2llbW/HudP5u0VS6Bfq1hLYfgU7uAYGFIyGGQIsSOXGPEErZiJw== + version "1.4.2" + resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.2.tgz#931ea3dea8e9de84e90781001dae30dea9ff1727" + integrity sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA== dependencies: "@lezer/common" "^1.0.0" @@ -1951,9 +1883,9 @@ "@lezer/lr" "^1.1.0" "@lezer/python@^1.1.4": - version "1.1.13" - resolved "https://registry.yarnpkg.com/@lezer/python/-/python-1.1.13.tgz#0a1cbdbbd68b588a11ceab1692e6cbb760d039c6" - integrity sha512-AdbRAtdQq94PfTNd4kqMEJhH2fqa2JdoyyqqVewY6w34w2Gi6dg2JuOtOgR21Bi0zP9r0KjSSHOUq/tP7FVT8A== + version "1.1.15" + resolved "https://registry.yarnpkg.com/@lezer/python/-/python-1.1.15.tgz#14a21b3bf1997d1b578f0bb959bf2062641798a2" + integrity sha512-aVQ43m2zk4FZYedCqL0KHPEUsqZOrmAvRhkhHlVPnDD1HODDyyQv5BRIuod4DadkgBEZd53vQOtXTonNbEgjrQ== dependencies: "@lezer/common" "^1.2.0" "@lezer/highlight" "^1.0.0" @@ -2032,16 +1964,11 @@ "@lezer/highlight" "^1.2.0" "@lezer/lr" "^1.4.0" -"@popperjs/core@^2.11.8": +"@popperjs/core@^2.11.8", "@popperjs/core@^2.9.0": version "2.11.8" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== -"@popperjs/core@^2.9.0": - version "2.11.2" - resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.2.tgz#830beaec4b4091a9e9398ac50f865ddea52186b9" - integrity sha512-92FRmppjjqz29VMJ2dn+xdyXZBrMlE42AV6Kq6BwjWV7CNUW1hs2FtxSNLQE+gJhaZ6AAmYuO9y8dshhcBl7vA== - "@prettier/plugin-ruby@^0.18.2": version "0.18.2" resolved "https://registry.yarnpkg.com/@prettier/plugin-ruby/-/plugin-ruby-0.18.2.tgz#f4d0b48484fcaa1927922fe34a1f5564de76d412" @@ -2050,14 +1977,14 @@ prettier ">=1.10" "@rails/actioncable@^6.0.0": - version "6.1.4" - resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-6.1.4.tgz#c3c5a9f8302c429af9722b6c50ab48049016d2a3" - integrity sha512-0LmSKJTuo2dL6BQ+9xxLnS9lbkyfz2mBGeBnQ2J7o9Bn0l0q+ZC6VuoZMZZXPvABI4QT7Nfknv5WhfKYL+boew== + version "6.1.710" + resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-6.1.710.tgz#5c77515cbc9b8fb5118afa0aa0048192b33c33ea" + integrity sha512-YDzMuh8mDRNLFXiexlLVnF1NUwk1bXwwO1gtEhOCsCqIsL6D21JfxpMwAD5x8qzrMJ1J0RZVa2hLl7ofeg+Mqw== "@rails/actioncable@^7.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.0.1.tgz#8f383b672e142d009f89b725d49b0832d99da74a" - integrity sha512-lbGc1z2RXdiWZJE/8o2GSe2gek82EoKd2YvjRrqV//0J3/JImONUYwZ2XPmS1R9R2oth1XlIG0YidqdeTty0TA== + version "7.2.201" + resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.2.201.tgz#bfb3da01b3e2462f5a18f372c52dedd7de76037f" + integrity sha512-wsTdWoZ5EfG5k3t7ORdyQF0ZmDEgN4aVPCanHAiNEwCROqibSZMXXmCbH7IDJUVri4FOeAVwwbPINI7HVHPKBw== "@sector-labs/postcss-inline-class@^0.0.6": version "0.0.6" @@ -2068,10 +1995,15 @@ postcss "^7.0.1" resolve "^1.1.7" +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" @@ -2083,34 +2015,34 @@ "@sinonjs/commons" "^1.7.0" "@stripe/react-stripe-js@^2.1.1": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-2.1.1.tgz#92fe1498bc9db4e0b51d63df3849214cc8021c55" - integrity sha512-aHm6cWOqmOyq3eKKlR42hgvrcZhzc9ijL+BeXJ5H3uaWUKKcooSsBys0tiKl0gLxYQHUjUCvrRSX8fYaPBmAKg== + version "2.9.0" + resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-2.9.0.tgz#1f1a9a3d5eab8ca144e060df1e9fd855a7658aca" + integrity sha512-+/j2g6qKAKuWSurhgRMfdlIdKM+nVVJCy/wl0US2Ccodlqx0WqfIIBhUkeONkCG+V/b+bZzcj4QVa3E/rXtT4Q== dependencies: prop-types "^15.7.2" "@stripe/stripe-js@^1.54.1": - version "1.54.1" - resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.54.1.tgz#e298b80c2963d9e622ea355db6c35df48e08cd89" - integrity sha512-smEXPu1GKMcAj9g2luT16+oXfg2jAwyc68t2Dm5wdtYl3p8PqQaZEiI8tQmboaQAjgF8pIGma6byz1T1vgmpbA== + version "1.54.2" + resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.54.2.tgz#0665848e22cbda936cfd05256facdfbba121438d" + integrity sha512-R1PwtDvUfs99cAjfuQ/WpwJ3c92+DAMy9xGApjqlWQMj0FKQabUAys2swfTRNzuYAYJh7NqK2dzcYVNkKLEKUg== -"@tanstack/query-core@4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.33.0.tgz#7756da9a75a424e521622b1d84eb55b7a2b33715" - integrity sha512-qYu73ptvnzRh6se2nyBIDHGBQvPY1XXl3yR769B7B6mIDD7s+EZhdlWHQ67JI6UOTFRaI7wupnTnwJ3gE0Mr/g== +"@tanstack/query-core@4.36.1": + version "4.36.1" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.36.1.tgz#79f8c1a539d47c83104210be2388813a7af2e524" + integrity sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA== "@tanstack/react-query@^4.33.0": - version "4.33.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.33.0.tgz#e927b0343a6ecaa948fee59e9ca98fe561062638" - integrity sha512-97nGbmDK0/m0B86BdiXzx3EW9RcDYKpnyL2+WwyuLHEgpfThYAnXFaMMmnTDuAO4bQJXEhflumIEUfKmP7ESGA== + version "4.36.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.36.1.tgz#acb589fab4085060e2e78013164868c9c785e5d2" + integrity sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw== dependencies: - "@tanstack/query-core" "4.33.0" + "@tanstack/query-core" "4.36.1" use-sync-external-store "^1.2.0" "@testing-library/dom@^9.0.0", "@testing-library/dom@^9.3.1": - version "9.3.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.1.tgz#8094f560e9389fb973fe957af41bf766937a9ee9" - integrity sha512-0DGPd9AR3+iDTjGoMpxIkAsUihHZ3Ai6CneU6bRRrffXMgzCdlNk43jTrD2/5LT6CBb3MWTP8v510JzYtahD2w== + version "9.3.4" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.4.tgz#50696ec28376926fec0a1bf87d9dbac5e27f60ce" + integrity sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" @@ -2122,24 +2054,24 @@ pretty-format "^27.0.2" "@testing-library/jest-dom@^5.11.0": - version "5.16.1" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.1.tgz#3db7df5ae97596264a7da9696fe14695ba02e51f" - integrity sha512-ajUJdfDIuTCadB79ukO+0l8O+QwN0LiSxDaYUTI4LndbbUsGi6rWU1SCexXzBA2NSjlVB9/vbkasQIL3tmPBjw== + version "5.17.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.17.0.tgz#5e97c8f9a15ccf4656da00fecab505728de81e0c" + integrity sha512-ynmNeT7asXyH3aSVv4vvX4Rb+0qjOhdNHnO/3vuZNqPmhDpV/+rCSGwQ7bLcmU2cJ4dvoheIO85LQj0IbJHEtg== dependencies: + "@adobe/css-tools" "^4.0.1" "@babel/runtime" "^7.9.2" "@types/testing-library__jest-dom" "^5.9.1" aria-query "^5.0.0" chalk "^3.0.0" - css "^3.0.0" css.escape "^1.5.1" dom-accessibility-api "^0.5.6" lodash "^4.17.15" redent "^3.0.0" "@testing-library/react@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c" - integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg== + version "14.3.1" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.3.1.tgz#29513fc3770d6fb75245c4e1245c470e4ffdd830" + integrity sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ== dependencies: "@babel/runtime" "^7.12.5" "@testing-library/dom" "^9.0.0" @@ -2170,9 +2102,9 @@ integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== "@types/actioncable@^5.2.3": - version "5.2.7" - resolved "https://registry.yarnpkg.com/@types/actioncable/-/actioncable-5.2.7.tgz#b42de922ba32f1a46c863df1ed32807ab08dda80" - integrity sha512-HVpCvvE4Att0vSfCVNHf3gmCoqQPlySWIhH4THkG4r0hc0IcvRa0gIVyd9ekswMf3WiBsDc52OKnduIZQ7qcRw== + version "5.2.11" + resolved "https://registry.yarnpkg.com/@types/actioncable/-/actioncable-5.2.11.tgz#4b563cec68f00973dc0c5e2cc6c3810d6169a38b" + integrity sha512-aGzv5JS3razLvv4ZJW+wlDuNS5y1IFFVlm1EkZq3ZHs6txju7/2iee1e6sdK6DE4zsz8cIREs1K4BtfF5RMESQ== "@types/animejs@^3.1.12": version "3.1.12" @@ -2180,42 +2112,42 @@ integrity sha512-fpdH+ZtlO0kqjTOqRaBdsEmvpRNOayI8k4EVkEtitL5l6wducDOXk0rgQgfZqWf/ZX9DzXrHf257S5i9xTcISQ== "@types/aria-query@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" - integrity sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q== + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14", "@types/babel__core@^7.1.7": - version "7.1.18" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" "@types/babel__generator" "*" "@types/babel__template" "*" "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== dependencies: - "@babel/types" "^7.3.0" + "@babel/types" "^7.20.7" "@types/bun@^1.1.13": version "1.1.14" @@ -2229,17 +2161,10 @@ resolved "https://registry.yarnpkg.com/@types/canvas-confetti/-/canvas-confetti-1.9.0.tgz#d1077752e046413c9881fbb2ba34a70ebe3c1773" integrity sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg== -"@types/codemirror@0.0.109": - version "0.0.109" - resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.109.tgz#89d575ff1c7b462c4c3b8654f8bb38e5622e9036" - integrity sha512-cSdiHeeLjvGn649lRTNeYrVCDOgDrtP+bDDSFDd1TF+i0jKGPDRozno2NOJ9lTniso+taiv4kiVS8dgM8Jm5lg== - dependencies: - "@types/tern" "*" - -"@types/codemirror@^5.60.4": - version "5.60.5" - resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-5.60.5.tgz#5b989a3b4bbe657458cf372c92b6bfda6061a2b7" - integrity sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg== +"@types/codemirror@^5.60.4", "@types/codemirror@~5.60.5": + version "5.60.15" + resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-5.60.15.tgz#0f82be6f4126d1e59cf4c4830e56dcd49d3c3e8a" + integrity sha512-dTOvwEQ+ouKJ/rE9LT1Ue2hmP6H1mZv5+CCnNWu2qtiOe2LQa9lCprEY20HxiDmV/Bxh+dXjywmy5aKvoGjULA== dependencies: "@types/tern" "*" @@ -2259,9 +2184,9 @@ integrity sha512-dhVCYGv3ZSbzmQaBSagrv1WJ6rXCdkyTcDyoNu1MD8JohI7pR7k8wdZEm+mvdxRKXyHVwckFzWU1vJc+Z29MlA== "@types/estree@*": - version "0.0.50" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/faker@5.5.9": version "5.5.9" @@ -2274,55 +2199,55 @@ integrity sha512-QJ1znjr9CDax2L17rgBnDOfNHsC1XtVAMswu+lRWvWb+kANhHA0slUNSSBsG8FVNvM4I4yXlN9doJRot3A2hkQ== "@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== dependencies: "@types/node" "*" "@types/humps@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/humps/-/humps-2.0.1.tgz#fc87ccbe59913240c3fdca5f0dd43cb9f073eb72" - integrity sha512-cxIGJjiOQRl5s/KjqoTa0u39qKrVD3T6+6eGsERva0MLBp9AMVG8udKn9JZgVDe9zF0J9H4SRVzKILK6iZ9IZQ== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/humps/-/humps-2.0.6.tgz#a358688fe092e40b5f50261e0a55e2fa6d68cabe" + integrity sha512-Fagm1/a/1J9gDKzGdtlPmmTN5eSw/aaTzHtj740oSfo+MODsSY2WglxMmhTdOglC8nxqUhGGQ+5HfVtBvxo3Kg== "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== dependencies: "@types/istanbul-lib-report" "*" "@types/jest@*": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.0.tgz#037ab8b872067cae842a320841693080f9cb84ed" - integrity sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== + version "29.5.14" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" + integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== dependencies: - jest-diff "^27.0.0" - pretty-format "^27.0.0" + expect "^29.0.0" + pretty-format "^29.0.0" "@types/jquery@^3.5.5": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.13.tgz#5482d3ee325d5862f77a91c09369ae0a5b082bf3" - integrity sha512-ZxJrup8nz/ZxcU0vantG+TPdboMhB24jad2uSap50zE7Q9rUeYlCF25kFMSmHR33qoeOgqcdHEp3roaookC0Sg== + version "3.5.32" + resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.32.tgz#3eb0da20611b92c7c49ebed6163b52a4fdc57def" + integrity sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ== dependencies: "@types/sizzle" "*" "@types/json-schema@^7.0.7": - version "7.0.9" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lodash.clonedeep@^4.5.9": version "4.5.9" @@ -2338,25 +2263,20 @@ dependencies: "@types/lodash" "*" -"@types/lodash@*": +"@types/lodash@*", "@types/lodash@^4.14.165": version "4.17.13" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.13.tgz#786e2d67cfd95e32862143abe7463a7f90c300eb" integrity sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg== -"@types/lodash@4.14.178", "@types/lodash@^4.14.165": +"@types/lodash@4.14.178": version "4.14.178" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== -"@types/marked@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-2.0.5.tgz#453e27f1e97199d45bb25297b0dd2b9bbc1e05ea" - integrity sha512-shRZ7XnYFD/8n8zSjKvFdto1QNSf4tONZIlNEZGrJe8GsOE8DL/hG1Hbl8gZlfLnjS7+f5tZGIaTgfpyW38h4w== - -"@types/marked@^4.0.1": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/marked/-/marked-4.0.2.tgz#cb2dbf10da2f41cf20bd91fb5f89b67540c282f7" - integrity sha512-auNrZ/c0w6wsM9DccwVxWHssrMDezHUAXNesdp2RQrCVCyrQbOiSq7yqdJKrUQQpw9VTm7CGYJH2A/YG7jjrjQ== +"@types/marked@^4.0.7": + version "4.3.2" + resolved "https://registry.yarnpkg.com/@types/marked/-/marked-4.3.2.tgz#e2e0ad02ebf5626bd215c5bae2aff6aff0ce9eac" + integrity sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w== "@types/minimatch@^3.0.3": version "3.0.5" @@ -2364,14 +2284,16 @@ integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/mousetrap@^1.6.8": - version "1.6.9" - resolved "https://registry.yarnpkg.com/@types/mousetrap/-/mousetrap-1.6.9.tgz#f1ef9adbd1eac3466f21b6988b1c82c633a45340" - integrity sha512-HUAiN65VsRXyFCTicolwb5+I7FM6f72zjMWr+ajGk+YTvzBgXqa2A5U7d+rtsouAkunJ5U4Sb5lNJjo9w+nmXg== + version "1.6.15" + resolved "https://registry.yarnpkg.com/@types/mousetrap/-/mousetrap-1.6.15.tgz#f144a0c539a4cef553a631824651d48267e53c86" + integrity sha512-qL0hyIMNPow317QWW/63RvL1x5MVMV+Ru3NaY9f/CuEpCqrmb7WeuK2071ZY5hczOnm38qExWM2i2WtkXLSqFw== "@types/node@*": - version "17.0.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.14.tgz#33b9b94f789a8fedd30a68efdbca4dbb06b61f20" - integrity sha512-SbjLmERksKOGzWzPNuW7fJM7fk3YXVTFiZWB/Hs99gwhk+/dnrQRPBQjPW9aO+fi1tAffi9PrwFvsmOKmDTyng== + version "22.10.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.2.tgz#a485426e6d1fdafc7b0d4c7b24e2c78182ddabb9" + integrity sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ== + dependencies: + undici-types "~6.20.0" "@types/node@~20.12.8": version "20.12.14" @@ -2388,9 +2310,9 @@ normalize-url "*" "@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== "@types/pluralize@^0.0.29": version "0.0.29" @@ -2398,92 +2320,80 @@ integrity sha512-BYOID+l2Aco2nBik+iYS4SZX0Lf20KPILP5RGmM1IgzdwNdTs0eebiFriOPcej1sX9mLnSoiNte5zcFxssgpGA== "@types/prettier@^2.1.5": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf" - integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w== + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== "@types/prop-types@*": - version "15.7.4" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.4.tgz#fcf7205c25dff795ee79af1e30da2c9790808f11" - integrity sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ== + version "15.7.14" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" + integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== "@types/qs@^6.9.5": - version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" - integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + version "6.9.17" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.17.tgz#fc560f60946d0aeff2f914eb41679659d3310e1a" + integrity sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ== "@types/react-dom@^18.0.0", "@types/react-dom@^18.2.7": - version "18.2.7" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.7.tgz#67222a08c0a6ae0a0da33c3532348277c70abb63" - integrity sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA== - dependencies: - "@types/react" "*" + version "18.3.5" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.5.tgz#45f9f87398c5dcea085b715c58ddcf1faf65f716" + integrity sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q== "@types/react-image-crop@^8.1.2": - version "8.1.3" - resolved "https://registry.yarnpkg.com/@types/react-image-crop/-/react-image-crop-8.1.3.tgz#1317f4f19f334ca22f7ff15927a72e8a8291ece3" - integrity sha512-icfA+xMUQIp4/u525uNRKVZyHA/j8C1dp7yFWiGC6dqXSKXoUg5QhqUotrrzxY285LgQMgaWBRjQzXyeUAKUUA== + version "8.1.6" + resolved "https://registry.yarnpkg.com/@types/react-image-crop/-/react-image-crop-8.1.6.tgz#9e25b6245733284f0ab4b594047b8c4f6d08f7a4" + integrity sha512-mH3qs5sk2lq0JitgAOyyFeQQ8Zlz+yCIhn4CNznmoRyH4PIRMpZUWi+hGqLyUeKTSMAg+daS3txHMR3oBAkkRg== dependencies: "@types/react" "*" "@types/react-modal@^3.12.0": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/react-modal/-/react-modal-3.13.1.tgz#5b9845c205fccc85d9a77966b6e16dc70a60825a" - integrity sha512-iY/gPvTDIy6Z+37l+ibmrY+GTV4KQTHcCyR5FIytm182RQS69G5ps4PH2FxtC7bAQ2QRHXMevsBgck7IQruHNg== + version "3.16.3" + resolved "https://registry.yarnpkg.com/@types/react-modal/-/react-modal-3.16.3.tgz#250f32c07f1de28e2bcf9c3e84b56adaa6897013" + integrity sha512-xXuGavyEGaFQDgBv4UVm8/ZsG+qxeQ7f77yNrW3n+1J6XAstUy5rYHeIHPh1KzsGc6IkCIdu6lQ2xWzu1jBTLg== dependencies: "@types/react" "*" "@types/react-transition-group@^4.4.0": - version "4.4.8" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.8.tgz#46f87d80512959cac793ecc610a93d80ef241ccf" - integrity sha512-QmQ22q+Pb+HQSn04NL3HtrqHwYMf4h3QKArOy5F8U5nEVMaihBs3SR10WiOM1iwPz5jIo8x/u11al+iEGZZrvg== - dependencies: - "@types/react" "*" + version "4.4.12" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.12.tgz#b5d76568485b02a307238270bfe96cb51ee2a044" + integrity sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w== "@types/react@*": - version "17.0.38" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.38.tgz#f24249fefd89357d5fa71f739a686b8d7c7202bd" - integrity sha512-SI92X1IA+FMnP3qM5m4QReluXzhcmovhZnLNm3pyeQlooi02qI7sLiepEYqT678uNiyc25XfCqxREFpy3W7YhQ== + version "19.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.2.tgz#9363e6b3ef898c471cb182dd269decc4afc1b4f6" + integrity sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg== dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/react@^18.2.21": - version "18.2.21" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.21.tgz#774c37fd01b522d0b91aed04811b58e4e0514ed9" - integrity sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA== + version "18.3.18" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.18.tgz#9b382c4cd32e13e463f97df07c2ee3bbcd26904b" + integrity sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ== dependencies: "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - "@types/sizzle@*": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== + version "2.3.9" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.9.tgz#d4597dbd4618264c414d7429363e3f50acb66ea2" + integrity sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w== "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/tern@*": - version "0.23.4" - resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" - integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== + version "0.23.9" + resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.9.tgz#6f6093a4a9af3e6bb8dde528e024924d196b367c" + integrity sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw== dependencies: "@types/estree" "*" "@types/testing-library__jest-dom@^5.9.1": - version "5.14.2" - resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.2.tgz#564fb2b2dc827147e937a75b639a05d17ce18b44" - integrity sha512-vehbtyHUShPxIa9SioxDwCvgxukDMH//icJG90sXQBUm5lJOHLT5kNeU9tnivhnA/TkOFMzGIXN2cTc4hY8/kg== + version "5.14.9" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.9.tgz#0fb1e6a0278d87b6737db55af5967570b67cb466" + integrity sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw== dependencies: "@types/jest" "*" @@ -2505,21 +2415,28 @@ "@types/node" "*" "@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + version "15.0.19" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.19.tgz#328fb89e46109ecbdb70c295d96ff2f46dfd01b9" + integrity sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA== dependencies: "@types/yargs-parser" "*" "@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== + version "16.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" + integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== + dependencies: + "@types/yargs-parser" "*" + +"@types/yargs@^17.0.8": + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" @@ -2615,9 +2532,9 @@ JSONStream@^1.3.4, JSONStream@^1.3.5: through ">=2.2.7 <3" abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== abbrev@1, abbrev@~1.1.1: version "1.1.1" @@ -2625,14 +2542,14 @@ abbrev@1, abbrev@~1.1.1: integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== abortcontroller-polyfill@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz#1b5b487bd6436b5b764fd52a612509702c3144b5" - integrity sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q== + version "1.7.8" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.8.tgz#fe8d4370403f02e2aa37e3d2b0b178bae9d83f49" + integrity sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ== ace-builds@^1.4.12: - version "1.4.14" - resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.4.14.tgz#2c41ccbccdd09e665d3489f161a20baeb3a3c852" - integrity sha512-NBOQlm9+7RBqRqZwimpgquaLeTJFayqb9UEPtTkpC3TkkwDnlsT/TwsCC0svjt9kEZ6G9mH5AEOHSz6Q/HrzQQ== + version "1.37.1" + resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.37.1.tgz#a29c33c4817b14ecda3916bd1232974ebc11471f" + integrity sha512-6/jxFucA1z1C3hgLlVkTE5/znZ+iYvD301vfwtybiMc3k76IDykliCD0xh/eYZMJUfsJtaOQHZ2AJO5ey0PHWw== acorn-globals@^6.0.0: version "6.0.0" @@ -2658,14 +2575,14 @@ acorn@^7.1.1, acorn@^7.4.0: integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== acorn@^8.2.4: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== actioncable@^5.2.4-3: - version "5.2.6" - resolved "https://registry.yarnpkg.com/actioncable/-/actioncable-5.2.6.tgz#cea30647183524f3bae8c2a78fa6ecd6d4dbc70c" - integrity sha512-ofLHm57nN24zghkl+tQe6IVrZeSJ655lNLQjNQJvtQkeTDqlF30McuMB4o9DqpxdHgW/w0RNWaAQHB6VPlleNQ== + version "5.2.8" + resolved "https://registry.yarnpkg.com/actioncable/-/actioncable-5.2.8.tgz#988c23d2d51513a572969348945eb7785eafcd5f" + integrity sha512-M/CfC7qDT7tux8B0BNYPek+aCw6OjB78K9l978Ff94U8v6+G9LOVCEnSFg4gxdAboRV8KTy9eTK3Wxbry4SXJA== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -2689,9 +2606,9 @@ agent-base@~4.2.1: es6-promisify "^5.0.0" agentkeepalive@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz#a113924dd3fa24a0bc3b78108c450c2abee00f67" - integrity sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ== + version "3.5.3" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.3.tgz#c210afce942b4287e2df2fbfe6c0d57eda2ce634" + integrity sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw== dependencies: humanize-ms "^1.2.1" @@ -2706,14 +2623,14 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: uri-js "^4.2.2" ajv@^8.0.1: - version "8.9.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.9.0.tgz#738019146638824dea25edcf299dcba1b0e7eb18" - integrity sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ== + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" - uri-js "^4.2.2" animejs@^3.2.2: version "3.2.2" @@ -2723,14 +2640,14 @@ animejs@^3.2.2: ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" - integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + integrity sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA== dependencies: string-width "^2.0.0" ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== ansi-escapes@^4.2.1: version "4.3.2" @@ -2742,17 +2659,17 @@ ansi-escapes@^4.2.1: ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== ansi-regex@^5.0.1: version "5.0.1" @@ -2791,12 +2708,12 @@ ansi-styles@^6.1.0: ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" - integrity sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk= + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== ansistyles@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz#5de60415bda071bb37127854c864f41b23254539" - integrity sha1-XeYEFb2gcbs3EnhUyGT0GyMlRTk= + integrity sha512-6QWEyvMgIXX0eO972y7YPBLSBsq7UWKFAoNNTLGaOJ9bstcEL9sCbcjf96dVfNDdUsRoGOK82vWFJlKApXds7g== any-promise@^1.0.0: version "1.3.0" @@ -2811,15 +2728,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -anymatch@~3.1.2: +anymatch@^3.0.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -2840,7 +2749,7 @@ aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: archy@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== are-we-there-yet@~1.1.2: version "1.1.7" @@ -2870,14 +2779,14 @@ aria-query@5.1.3: deep-equal "^2.0.5" aria-query@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.0.tgz#210c21aaf469613ee8c9a62c7f86525e058db52c" - integrity sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg== + version "5.3.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" + integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== arr-flatten@^1.1.0: version "1.1.0" @@ -2887,30 +2796,31 @@ arr-flatten@^1.1.0: arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" + call-bound "^1.0.3" + is-array-buffer "^3.0.5" array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== -array-includes@^3.1.3, array-includes@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9" - integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw== +array-includes@^3.1.6, array-includes@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" + integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.4" is-string "^1.0.7" array-union@^2.1.0: @@ -2926,16 +2836,76 @@ array-union@^3.0.1: array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== -array.prototype.flatmap@^1.2.5: +array.prototype.findlast@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446" - integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA== + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.19.0" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" + +array.prototype.flat@^1.3.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.flatmap@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.reduce@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7" + integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + is-string "^1.0.7" + +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" arrify@^2.0.1: version "2.0.1" @@ -2945,7 +2915,7 @@ arrify@^2.0.1: asap@^2.0.0, asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== asn1@~0.2.3: version "0.2.6" @@ -2957,12 +2927,12 @@ asn1@~0.2.3: assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== astral-regex@^2.0.0: version "2.0.0" @@ -2972,7 +2942,7 @@ astral-regex@^2.0.0: asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== atob@^2.1.2: version "2.1.2" @@ -2991,20 +2961,22 @@ autoprefixer@latest: picocolors "^1.0.1" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== babel-jest@^26.5.0, babel-jest@^26.6.3: version "26.6.3" @@ -3020,18 +2992,18 @@ babel-jest@^26.5.0, babel-jest@^26.6.3: graceful-fs "^4.2.4" slash "^3.0.0" -babel-jest@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.4.6.tgz#4d024e69e241cdf4f396e453a07100f44f7ce314" - integrity sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg== +babel-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" + integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== dependencies: - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.4.0" + babel-preset-jest "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" slash "^3.0.0" babel-plugin-dynamic-import-node-babel-7@^2.0.7: @@ -3041,13 +3013,6 @@ babel-plugin-dynamic-import-node-babel-7@^2.0.7: dependencies: "@babel/plugin-syntax-dynamic-import" "^7.0.0-beta.42" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - babel-plugin-istanbul@^6.0.0, babel-plugin-istanbul@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" @@ -3069,10 +3034,10 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-jest-hoist@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz#d7831fc0f93573788d80dee7e682482da4c730d6" - integrity sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw== +babel-plugin-jest-hoist@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" + integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" @@ -3088,29 +3053,29 @@ babel-plugin-macros@^3.1.0: cosmiconfig "^7.0.0" resolve "^1.19.0" -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.12" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.12.tgz#ca55bbec8ab0edeeef3d7b8ffd75322e210879a9" + integrity sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.3" + semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz#2deda57caef50f59c525aeb4964d3b2f867710c7" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.3.tgz#abeb1f3f1c762eace37587f42548b08b57789bc8" + integrity sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.6.3" babel-plugin-transform-react-remove-prop-types@^0.4.24: version "0.4.24" @@ -3118,22 +3083,25 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24: integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" babel-preset-jest@^26.6.2: version "26.6.2" @@ -3143,12 +3111,12 @@ babel-preset-jest@^26.6.2: babel-plugin-jest-hoist "^26.6.2" babel-preset-current-node-syntax "^1.0.0" -babel-preset-jest@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz#70d0e676a282ccb200fbabd7f415db5fdf393bca" - integrity sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg== +babel-preset-jest@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" + integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== dependencies: - babel-plugin-jest-hoist "^27.4.0" + babel-plugin-jest-hoist "^27.5.1" babel-preset-current-node-syntax "^1.0.0" balanced-match@^1.0.0: @@ -3172,7 +3140,7 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" @@ -3193,7 +3161,7 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -3201,7 +3169,7 @@ bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== boxen@^1.2.1: version "1.3.0" @@ -3247,7 +3215,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@^3.0.3, braces@~3.0.2: +braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== @@ -3260,35 +3228,13 @@ browser-process-hrtime@^1.0.0: integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browserslist-to-esbuild@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/browserslist-to-esbuild/-/browserslist-to-esbuild-1.1.1.tgz#acb743cb7877ddec8c51d41cc9a2a7fe8e7ddbb5" - integrity sha512-FGnR2nWUvgQhHXN6KFGybfAEdAnHetmv7oiS3EE6qFmERILZ/3fxY9X2KGgvb9+TzBG5sW/sxwknUZJiWJTL5Q== + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserslist-to-esbuild/-/browserslist-to-esbuild-1.2.0.tgz#5c5b9ca73106da02e0168007396c4ec4c1e6d643" + integrity sha512-ftrrbI/VHBgEnmnSyhkqvQVMp6jAKybfs0qMIlm7SLBrQTGMsdCIP4q3BoKeLsZTBQllIQtY9kbxgRYV2WU47g== dependencies: browserslist "^4.17.3" -browserslist@^4.0.0, browserslist@^4.16.6: - version "4.19.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.3.tgz#29b7caad327ecf2859485f696f9604214bedd383" - integrity sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg== - dependencies: - caniuse-lite "^1.0.30001312" - electron-to-chromium "^1.4.71" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -browserslist@^4.17.3, browserslist@^4.17.5, browserslist@^4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== - dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" - -browserslist@^4.23.3: +browserslist@^4.0.0, browserslist@^4.17.3, browserslist@^4.21.4, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.2: version "4.24.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.3.tgz#5fc2725ca8fb3c1432e13dac278c7cc103e026d2" integrity sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA== @@ -3313,7 +3259,7 @@ buffer-from@^1.0.0: builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" - integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + integrity sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ== bun-types@1.1.37: version "1.1.37" @@ -3326,14 +3272,14 @@ bun-types@1.1.37: byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" - integrity sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE= + integrity sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q== byte-size@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz#4b651039a5ecd96767e71a3d7ed380e48bed4191" integrity sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw== -cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.4: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== @@ -3369,13 +3315,31 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz#32e5892e6361b29b0b545ba6f7763378daca2840" + integrity sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" + get-intrinsic "^1.2.4" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" call-limit@^1.1.1: version "1.1.1" @@ -3392,10 +3356,10 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== -camelcase@^4.0.0, camelcase@^4.1.0: +camelcase@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" @@ -3417,12 +3381,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001286, caniuse-lite@^1.0.30001312: - version "1.0.30001618" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001618.tgz" - integrity sha512-p407+D1tIkDvsEAPS22lJxLQQaG8OTBEqo0KhzfABGk0TU4juBNDSfH0hyAp/HRyx+M8L17z/ltyhxh27FTfQg== - -caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: version "1.0.30001690" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== @@ -3440,16 +3399,16 @@ capture-exit@^2.0.0: rsvp "^4.8.4" capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz#1c43f6b059d4249e7f3f8724f15f048b927d3a8a" + integrity sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w== caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2: +chalk@^2.0.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3480,26 +3439,11 @@ char-regex@^1.0.2: integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== chart.js@^3.1.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.7.0.tgz#7a19c93035341df801d613993c2170a1fcf1d882" - integrity sha512-31gVuqqKp3lDIFmzpKIrBeum4OpZsQjSIAqlOpgjosHDJZlULtvwLEZKtEhIAZc7JMPaHlYMys40Qy9Mf+1AAg== - -chokidar@^3.3.0, chokidar@^3.4.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" + version "3.9.1" + resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.9.1.tgz#3abf2c775169c4c71217a107163ac708515924b8" + integrity sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w== -chokidar@^3.6.0: +chokidar@^3.3.0, chokidar@^3.4.2, chokidar@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== @@ -3530,9 +3474,9 @@ ci-info@^2.0.0: integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cidr-regex@^2.0.10: version "2.0.10" @@ -3542,9 +3486,9 @@ cidr-regex@^2.0.10: ip-regex "^2.1.0" cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" + integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== class-utils@^0.3.5: version "0.3.6" @@ -3559,12 +3503,12 @@ class-utils@^0.3.5: cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" - integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + integrity sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg== cli-columns@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz#6732d972979efc2ae444a1f08e08fa139c96a18e" - integrity sha1-ZzLZcpee/CrkRKHwjgj6E5yWoY4= + integrity sha512-iQYpDgpPPmCjn534ikQOhi+ydP6uMar+DtJ6a0In4aGL/PKqWfao75s6eF81quQQaz7isGz+goNECLARRZswdg== dependencies: string-width "^2.0.0" strip-ansi "^3.0.1" @@ -3579,15 +3523,6 @@ cli-table3@^0.5.0, cli-table3@^0.5.1: optionalDependencies: colors "^1.1.2" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -3606,15 +3541,24 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== clsx@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== cmd-shim@^3.0.0, cmd-shim@^3.0.3: version "3.0.3" @@ -3627,16 +3571,16 @@ cmd-shim@^3.0.0, cmd-shim@^3.0.3: co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== "codemirror-lang-elixir@https://github.com/sachinraja/codemirror-lang-elixir": - version "2.0.0" - resolved "https://github.com/sachinraja/codemirror-lang-elixir#999a3eb1fc8465d8ca01121aa9c2b52b4ccf9efb" + version "3.0.1" + resolved "https://github.com/sachinraja/codemirror-lang-elixir#bc0e5af9a57aa5b4cff33bd83aea753106079354" codemirror-lang-jq@^1.0.0: version "1.0.0" @@ -3657,14 +3601,14 @@ codemirror-readonly-ranges@^0.1.0-alpha.2: codemirror-spell-checker@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/codemirror-spell-checker/-/codemirror-spell-checker-1.1.2.tgz#1c660f9089483ccb5113b9ba9ca19c3f4993371e" - integrity sha1-HGYPkIlIPMtRE7m6nKGcP0mTNx4= + integrity sha512-2Tl6n0v+GJRsC9K3MLCdLaMOmvWL0uukajNJseorZJsslaxZyZMgENocPU8R0DyoTAiKsyqiemSOZo7kjGV0LQ== dependencies: typo-js "*" codemirror@^5.63.1: - version "5.65.1" - resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.1.tgz#5988a812c974c467f964bcc1a00c944e373de502" - integrity sha512-s6aac+DD+4O2u1aBmdxhB7yz2XU7tG3snOyQ05Kxifahz7hoxnfxIRHxiCSEv3TUC38dIVH8G+lZH9UWSfGQxA== + version "5.65.18" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.65.18.tgz#d7146e4271135a9b4adcd023a270185457c9c428" + integrity sha512-Gaz4gHnkbHMGgahNt3CA5HBk5lLQBqmD/pBgeB4kQU6OedZmqMBjlRF0LSrp2tJ4wlLNPm2FfaUd1pDy0mdlpA== codemirror@^6.0.1: version "6.0.1" @@ -3680,14 +3624,14 @@ codemirror@^6.0.1: "@codemirror/view" "^6.0.0" collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -3709,7 +3653,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" @@ -3717,9 +3661,9 @@ color-name@~1.1.4: integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== colord@^2.9.1: - version "2.9.2" - resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.2.tgz#25e2bacbbaa65991422c07ea209e2089428effb1" - integrity sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ== + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colors@^1.1.2: version "1.4.0" @@ -3729,7 +3673,7 @@ colors@^1.1.2: columnify@~1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz#4737ddf1c7b69a8a7c340570782e947eec8e78bb" - integrity sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs= + integrity sha512-rFl+iXVT1nhLQPfGDw+3WcS8rmm7XsLKUmhsGE3ihzzpIikeGrTaZPIRKYWeLsLBypsHzjXIvYEltVUZS84XxQ== dependencies: strip-ansi "^3.0.0" wcwidth "^1.0.0" @@ -3752,9 +3696,9 @@ commander@^7.2.0: integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== concat-map@0.0.1: version "0.0.1" @@ -3771,7 +3715,7 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@^1.1.12: +config-chain@^1.1.13: version "1.1.13" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== @@ -3794,24 +3738,22 @@ configstore@^3.0.0: console-control-strings@^1.0.0, console-control-strings@^1.1.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@^1.5.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + cookie@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== copy-concurrently@^1.0.0: version "1.0.5" @@ -3828,32 +3770,31 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== copy-to-clipboard@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" - integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.20.2, core-js-compat@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.21.0.tgz#bcc86aa5a589cee358e7a7fa0a4979d5a76c3885" - integrity sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A== +core-js-compat@^3.38.0, core-js-compat@^3.38.1: + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.39.0.tgz#b12dccb495f2601dc860bdbe7b4e3ffa8ba63f61" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== dependencies: - browserslist "^4.19.1" - semver "7.0.0" + browserslist "^4.24.2" core-js@^3.6.5: - version "3.21.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.0.tgz#f479dbfc3dffb035a0827602dd056839a774aa71" - integrity sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ== + version "3.39.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.39.0.tgz#57f7647f4d2d030c32a72ea23a0555b2eaa30f83" + integrity sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g== core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: version "1.0.3" @@ -3861,9 +3802,9 @@ core-util-is@~1.0.0: integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== cosmiconfig@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -3874,7 +3815,7 @@ cosmiconfig@^7.0.0: create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + integrity sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw== dependencies: capture-stack-trace "^1.0.0" @@ -3886,16 +3827,16 @@ crelt@^1.0.5: cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + version "6.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" + integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -3904,9 +3845,9 @@ cross-spawn@^6.0.0: which "^1.2.9" cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" @@ -3915,23 +3856,21 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== -css-declaration-sorter@^6.0.3: - version "6.1.4" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz#b9bfb4ed9a41f8dcca9bf7184d849ea94a8294b4" - integrity sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw== - dependencies: - timsort "^0.3.0" +css-declaration-sorter@^6.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" + integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== css-select@^4.1.3: - version "4.2.1" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd" - integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" - css-what "^5.1.0" - domhandler "^4.3.0" + css-what "^6.0.1" + domhandler "^4.3.1" domutils "^2.8.0" nth-check "^2.0.1" @@ -3951,76 +3890,67 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" - integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== +css-what@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== css.escape@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s= - -css@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" - integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== - dependencies: - inherits "^2.0.4" - source-map "^0.6.1" - source-map-resolve "^0.6.0" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -cssnano-preset-default@^5.1.12: - version "5.1.12" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz#64e2ad8e27a279e1413d2d2383ef89a41c909be9" - integrity sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w== - dependencies: - css-declaration-sorter "^6.0.3" - cssnano-utils "^3.0.2" - postcss-calc "^8.2.0" - postcss-colormin "^5.2.5" - postcss-convert-values "^5.0.4" - postcss-discard-comments "^5.0.3" - postcss-discard-duplicates "^5.0.3" - postcss-discard-empty "^5.0.3" - postcss-discard-overridden "^5.0.4" - postcss-merge-longhand "^5.0.6" - postcss-merge-rules "^5.0.6" - postcss-minify-font-values "^5.0.4" - postcss-minify-gradients "^5.0.6" - postcss-minify-params "^5.0.5" - postcss-minify-selectors "^5.1.3" - postcss-normalize-charset "^5.0.3" - postcss-normalize-display-values "^5.0.3" - postcss-normalize-positions "^5.0.4" - postcss-normalize-repeat-style "^5.0.4" - postcss-normalize-string "^5.0.4" - postcss-normalize-timing-functions "^5.0.3" - postcss-normalize-unicode "^5.0.4" - postcss-normalize-url "^5.0.5" - postcss-normalize-whitespace "^5.0.4" - postcss-ordered-values "^5.0.5" - postcss-reduce-initial "^5.0.3" - postcss-reduce-transforms "^5.0.4" - postcss-svgo "^5.0.4" - postcss-unique-selectors "^5.0.4" - -cssnano-utils@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.0.2.tgz#d82b4991a27ba6fec644b39bab35fe027137f516" - integrity sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ== +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== cssnano@^5.0.17: - version "5.0.17" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.0.17.tgz#ff45713c05cfc780a1aeb3e663b6f224d091cabf" - integrity sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw== + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== dependencies: - cssnano-preset-default "^5.1.12" + cssnano-preset-default "^5.2.14" lilconfig "^2.0.3" yaml "^1.10.2" @@ -4049,9 +3979,9 @@ cssstyle@^2.3.0: cssom "~0.3.6" csstype@^3.0.2: - version "3.0.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5" - integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== currency.js@^2.0.4: version "2.0.4" @@ -4059,14 +3989,14 @@ currency.js@^2.0.4: integrity sha512-6/OplJYgJ0RUlli74d93HJ/OsKVBi8lB1+Z6eJYS1YZzBuIp4qKKHpJ7ad+GvTlWmLR/hLJOWTykN5Nm8NJ7+w== cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + version "1.0.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.2.tgz#673b5f233bf34d8e602b949429f8171d9121bea3" + integrity sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA== dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" @@ -4079,10 +4009,37 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + dayjs@^1.8.35: - version "1.10.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.10.7.tgz#2cf5f91add28116748440866a0a1d26f3a6ce468" - integrity sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig== + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== debug@3.1.0: version "3.1.0" @@ -4092,11 +4049,11 @@ debug@3.1.0: ms "2.0.0" debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.0, debug@^4.3.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - ms "2.1.2" + ms "^2.1.3" debug@^2.2.0, debug@^2.3.3: version "2.6.9" @@ -4112,40 +4069,40 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debuglog@^1.0.1: +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" - integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + integrity sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== -decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== deep-equal@^2.0.5: - version "2.2.2" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" - integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== + version "2.2.3" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" + integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== dependencies: array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" + call-bind "^1.0.5" es-get-iterator "^1.1.3" - get-intrinsic "^1.2.1" + get-intrinsic "^1.2.2" is-arguments "^1.1.1" is-array-buffer "^3.0.2" is-date-object "^1.0.5" @@ -4155,60 +4112,63 @@ deep-equal@^2.0.5: object-is "^1.1.5" object-keys "^1.1.1" object.assign "^4.1.4" - regexp.prototype.flags "^1.5.0" + regexp.prototype.flags "^1.5.1" side-channel "^1.0.4" which-boxed-primitive "^1.0.2" which-collection "^1.0.1" - which-typed-array "^1.1.9" + which-typed-array "^1.1.13" deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: clone "^1.0.2" -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - object-keys "^1.0.12" + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" -define-properties@^1.1.4, define-properties@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" - integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== +define-properties@^1.1.3, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== dependencies: + define-data-property "^1.0.1" has-property-descriptors "^1.0.0" object-keys "^1.1.1" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== dependencies: is-descriptor "^1.0.0" @@ -4223,12 +4183,12 @@ define-property@^2.0.2: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== dependency-graph@^0.11.0: version "0.11.0" @@ -4238,22 +4198,22 @@ dependency-graph@^0.11.0: detect-indent@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha1-OHHMCmoALow+Wzz38zYmRnXwa50= + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= + integrity sha512-CwffZFvlJffUg9zZA0uqrjQayUTC8ob94pnr5sFwaVv3IOmkfUHcWH+jXaQK3askE51Cqe8/9Ql/0uXNwqZ8Zg== detect-newline@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -dezalgo@^1.0.0, dezalgo@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" - integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= +dezalgo@^1.0.0, dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== dependencies: asap "^2.0.0" wrappy "1" @@ -4263,25 +4223,25 @@ didyoumean@^1.2.2: resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== -diff-sequences@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" - integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== +diff-sequences@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" + integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff2html@^3.4.5: - version "3.4.15" - resolved "https://registry.yarnpkg.com/diff2html/-/diff2html-3.4.15.tgz#9cba93d7a8d05104963a0e36e2e4aaca6505ce05" - integrity sha512-DNzGoknNE1lIPJWkIYCszIe8PxXHrHl939WQX+Rzr8Q5l3ex8VyJjZCGKwzfMN6jiSyli7hNHyoApnz6prfZ3Q== + version "3.4.51" + resolved "https://registry.yarnpkg.com/diff2html/-/diff2html-3.4.51.tgz#6355170d09d8625525f0846be2c73bc2838ab797" + integrity sha512-/rVCSDyokkzSCEGaGjkkElXtIRwyNDRzIa3S8VUhR6pjk25p6+AMnb1s2zGmhjl66D5m/HnV3IeZoxnWsvTy+w== dependencies: - diff "5.0.0" + diff "^7.0.0" hogan.js "3.0.2" optionalDependencies: - highlight.js "11.2.0" - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + highlight.js "11.9.0" diff@^7.0.0: version "7.0.0" @@ -4314,12 +4274,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.6: - version "0.5.11" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.11.tgz#79d5846c4f90eba3e617d9031e921de9324f84ed" - integrity sha512-7X6GvzjYf4yTdRKuCVScV+aA9Fvh5r8WzWrXBH9w82ZWB/eYDMGCnazoC/YAqAzUJWHzLOnZqr46K3iEyUhUvw== - -dom-accessibility-api@^0.5.9: +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: version "0.5.16" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== @@ -4333,9 +4288,9 @@ dom-helpers@^5.0.1: csstype "^3.0.2" dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" domhandler "^4.2.0" @@ -4347,9 +4302,9 @@ dom-walk@^0.1.0: integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== domelementtype@^2.0.1, domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== domexception@^2.0.1: version "2.0.1" @@ -4358,10 +4313,10 @@ domexception@^2.0.1: dependencies: webidl-conversions "^5.0.0" -domhandler@^4.2.0, domhandler@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" - integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== +domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" @@ -4386,10 +4341,19 @@ dotenv@^5.0.1: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz#a5317459bd3d79ab88cff6e44057a6a3fbb1fcef" integrity sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow== +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" @@ -4407,20 +4371,20 @@ eastasianwidth@^0.2.0: integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== easymde@^2.15.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/easymde/-/easymde-2.16.1.tgz#f4c2380312615cb33826f1a1fecfaa4022ff551a" - integrity sha512-FihYgjRsKfhGNk89SHSqxKLC4aJ1kfybPWW6iAmtb5GnXu+tnFPSzSaGBmk1RRlCuhFSjhF0SnIMGVPjEzkr6g== + version "2.18.0" + resolved "https://registry.yarnpkg.com/easymde/-/easymde-2.18.0.tgz#ff1397d07329b1a7b9187d2d0c20766fa16b3b1b" + integrity sha512-IxVVUxNWIoXLeqtBU4BLc+eS/ScYhT1Dcb6yF5Wchoj1iXAV+TIIDWx+NCaZhY7RcSHqDPKllbYq7nwGKILnoA== dependencies: "@types/codemirror" "^5.60.4" - "@types/marked" "^4.0.1" + "@types/marked" "^4.0.7" codemirror "^5.63.1" codemirror-spell-checker "1.1.2" - marked "^4.0.10" + marked "^4.1.0" ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" @@ -4428,17 +4392,7 @@ ecc-jsbn@~0.1.1: editor@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz#60c7f87bd62bcc6a894fa8ccd6afb7823a24f742" - integrity sha1-YMf4e9YrzGqJT6jM1q+3gjok90I= - -electron-to-chromium@^1.4.17: - version "1.4.61" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.61.tgz#97689f81b4ac5c996363d9ee7babd3406c44d6c3" - integrity sha512-kpzCOOFlx63C9qKRyIDEsKIUgzoe98ump7T4gU+/OLzj8gYkkWf2SIyBjhTSE0keAjMAp3i7C262YtkQOMYrGw== - -electron-to-chromium@^1.4.71: - version "1.4.71" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.71.tgz#17056914465da0890ce00351a3b946fd4cd51ff6" - integrity sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw== + integrity sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw== electron-to-chromium@^1.5.73: version "1.5.76" @@ -4480,11 +4434,12 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: once "^1.4.0" enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== dependencies: ansi-colors "^4.1.1" + strip-ansi "^6.0.1" entities@^2.0.0: version "2.2.0" @@ -4504,7 +4459,7 @@ env-paths@^2.2.0: err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" - integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + integrity sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA== errno@~0.1.7: version "0.1.8" @@ -4513,7 +4468,7 @@ errno@~0.1.7: dependencies: prr "~1.0.1" -error-ex@^1.2.0, error-ex@^1.3.1: +error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== @@ -4521,37 +4476,81 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" error-stack-parser@^2.0.2, error-stack-parser@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - -es-abstract@^1.19.0, es-abstract@^1.19.1: - version "1.19.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" - integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.4" - is-negative-zero "^2.0.1" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.1" - is-string "^1.0.7" - is-weakref "^1.0.1" - object-inspect "^1.11.0" + version "2.1.4" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz#229cb01cdbfa84440bfa91876285b94680188286" + integrity sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ== + dependencies: + stackframe "^1.3.4" + +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6: + version "1.23.8" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.8.tgz#99754723118355d82fcef9ce4c90ccbcd5d2a285" + integrity sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.6" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" + object.assign "^4.1.7" + own-keys "^1.0.0" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-get-iterator@^1.1.3: version "1.1.3" @@ -4568,14 +4567,59 @@ es-get-iterator@^1.1.3: isarray "^2.0.5" stop-iteration-iterator "^1.0.0" -es-to-primitive@^1.2.1: +es-iterator-helpers@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz#d1dd0f58129054c0ad922e6a9a1e65eef435fe75" + integrity sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + function-bind "^1.1.2" + get-intrinsic "^1.2.6" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + iterator.prototype "^1.1.4" + safe-array-concat "^1.1.3" + +es-object-atoms@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" + integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + +es-shim-unscopables@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" es6-promise@^4.0.3: version "4.2.8" @@ -4585,34 +4629,39 @@ es6-promise@^4.0.3: es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ== dependencies: es6-promise "^4.0.3" -esbuild-android-arm64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.17.tgz#7216810cb8d5b8cd03ce70bdc241dcdd90c34755" - integrity sha512-y7EJm8ADC9qKbo/dJ2zBXwNdIILJ76tTv7JDGvOkbLT8HJXIsgbpa0NJk7iFhyvP4GpsYvXTbvEQNn0DhyBhLA== +esbuild-android-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be" + integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ== + +esbuild-android-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771" + integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg== -esbuild-darwin-64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.17.tgz#1419e020f41814f8a74ce92b2dcab29a6d47e510" - integrity sha512-V2JAP8yyVbW6qR4SVXsEDqRicYM0x5niUuB05IFiE5itPI45k8j2dA2l+DtirR2SGXr+LEqgX347+2VA6eyTiA== +esbuild-darwin-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25" + integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug== -esbuild-darwin-arm64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.17.tgz#95acf1022066d48346a63ffc5e4d36a07b83c9b0" - integrity sha512-ENkSKpjF4SImyA2TdHhKiZqtYc1DkMykICe1KSBw0YNF1sentjFI6wu+CRiYMpC7REf/3TQXoems2XPqIqDMlQ== +esbuild-darwin-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73" + integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw== -esbuild-freebsd-64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.17.tgz#a3455199862110854937b05a0eecbed3e1aeec41" - integrity sha512-2i0nTNJM8ftNTvtR00vdqkru8XpHwAbkR2MBLoK2IDSzjsLStwCj+mxf6v83eVM9Abe3QA8xP+irqOdBlwDQ2g== +esbuild-freebsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d" + integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg== -esbuild-freebsd-arm64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.17.tgz#8a70f2a36f5b0da7d2efdd6fd02aa78611007fd0" - integrity sha512-QOmRi1n+uly2G7BbMbHb86YiFA5aM7B2T96A6OF1VG57LNwXwy8LPVM0PVjl7f9cV3pE3fy3VtXPJHJo8XggTA== +esbuild-freebsd-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48" + integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q== esbuild-jest@^0.5.0: version "0.5.0" @@ -4623,50 +4672,55 @@ esbuild-jest@^0.5.0: "@babel/plugin-transform-modules-commonjs" "^7.12.13" babel-jest "^26.6.3" -esbuild-linux-32@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.17.tgz#b7123f6e4780687e017454604d909fbe558862e9" - integrity sha512-qG5NDk7FHHUVw01rjHESON0HvigF2X80b645TUlgTKsWRlrbzzHhMCmQguA01O5PiCimKnyoxti8aJIFNHpQnQ== - -esbuild-linux-64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.17.tgz#47a6b510c2f7faef595a4d6257a629e65385fdc3" - integrity sha512-De8OcmNvfNyFfQRLWbfuZqau6NpYBJxNTLP7Ls/PqQcw0HAwfaYThutY8ozHpPbKFPa7wgqabXlIC4NVSWT0/A== - -esbuild-linux-arm64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.17.tgz#dfd9022b7215ca660d464fcb20597b88887c7e64" - integrity sha512-WDEOD/YRA4J1lxhETKZff3gRxGYqqZEiVwIOqNfvCh2YcwWU2y6UmNGZsxcuKk18wot4dAXCXQyNZgBkVUTCLw== - -esbuild-linux-arm@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.17.tgz#e6f6bb9fe52def5260d7d49b790fbec0e7c6d9cb" - integrity sha512-ZwsgFUk3gR2pEMJdh5z4Ds18fvGETgElPqmNdx1NtZTCOVlFMAwFB5u/tOR2FrXbMFv+LkGnNxPDh48PYPDz9A== - -esbuild-linux-mips64le@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.17.tgz#bceaad33ff18a822b6da0396c6497a231397b6c3" - integrity sha512-Lf4X9NB7r6imzp/11TaGs4kWL0DUn1JxI9gAAKotnKh6T8Y/0sLvZSvQS8WvSZcr0V8RRCrRZwiQqjOALUU/9g== - -esbuild-linux-ppc64le@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.17.tgz#9562f094d1e5e6c3b61b776b15a9bbd657042654" - integrity sha512-aExhxbrK7/Mh9FArdiC9MbvrQz2bGCDI8cBALKJbmhKg0h7LNt6y1E1S9GGBZ/ZXkHDvV9FFVrXXZKFVU5Qpiw== - -esbuild-linux-s390x@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.17.tgz#2963cfe62c227bbf1da64e36d4ca0b23db8008fe" - integrity sha512-b0T20rNcS7POi5YLw5dFlsiC+riobR5IfppQGn5NWer6QiIkdL1vOx9eC9CUD3z1itpkLboRAZYieZfKfhCA2Q== - -esbuild-netbsd-64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.17.tgz#1d156023f9ae6be79b8627ab0cda2d7feb7f3a48" - integrity sha512-pFgTaAa2JF18nqNfCND9wOu1jbZ/mbDSaMxUp5fTkLlofyHhXeb5aChgXUkeipty2Pgq0OwOnxjHmiAxMI7N4g== - -esbuild-openbsd-64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.17.tgz#3fc44102c9b65375385112f4ce5899ae5e38f349" - integrity sha512-K5+plb6gsAfBcFqB0EG4KvLbgBKslVAfEyJggicwt/QoDwQGJAzao4M6zOA4PG7LlXOwWSqv7VmSFbH+b6DyKw== +esbuild-linux-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5" + integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw== + +esbuild-linux-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652" + integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg== + +esbuild-linux-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b" + integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig== + +esbuild-linux-arm@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59" + integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw== + +esbuild-linux-mips64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34" + integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw== + +esbuild-linux-ppc64le@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e" + integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ== + +esbuild-linux-riscv64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8" + integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg== + +esbuild-linux-s390x@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6" + integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA== + +esbuild-netbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81" + integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w== + +esbuild-openbsd-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b" + integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw== esbuild-plugin-import-glob@^0.1.1: version "0.1.1" @@ -4675,56 +4729,54 @@ esbuild-plugin-import-glob@^0.1.1: dependencies: fast-glob "^3.2.5" -esbuild-sunos-64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.17.tgz#5bd24e7a7e863ea89d7e4eafd5364a155c9ea507" - integrity sha512-o1FINkbHRi9JB1YteOSXZdkDOmVUbmnCxRmTLkHvk8pfCFNpv/5/7ktt95teYKbEiJna2dEt3M4ckJ/+UVnW+w== +esbuild-sunos-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da" + integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw== -esbuild-windows-32@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.17.tgz#8bda31c550fb6b425707114141d2c6ba034dab9b" - integrity sha512-Qutilz0I7OADWBtWrC/FD+2O/TNAkhwbZ+wIns7kF87lxIMtmqpBt3KnMk1e4F47aTrZRr0oH55Zhztd7m2PAA== +esbuild-windows-32@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31" + integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w== -esbuild-windows-64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.17.tgz#50b42c06908d3ce9fab8f0f9673199de5d0f9cbc" - integrity sha512-b21/oRV+PHrav0HkRpKjbM2yNRVe34gAfbdMppbZFea416wa8SrjcmVfSd7n4jgqoTQG0xe+MGgOpwXtjiB3DQ== +esbuild-windows-64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4" + integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ== -esbuild-windows-arm64@0.14.17: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.17.tgz#62d3921a810b64a03fcace76dad4db51d2128b45" - integrity sha512-4HN9E1idllewYvptcrrdfTA6DIWgg11kK0Zrv6yjxstJZLJeKxfilGBEaksLGs4Pst2rAYMx3H2vbYq7AWLQNA== +esbuild-windows-arm64@0.14.54: + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982" + integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg== esbuild@^0.14.5: - version "0.14.17" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.17.tgz#6a634e56447aa0e90b34c42091d472d802d399e5" - integrity sha512-JLgyC6Uv31mv9T9Mm2xF1LntUMCNBSzvg2n32d8cTKZMwFr1wmMFY2FkVum98TSoEsDff0cR+Aj49H2sbBcjKQ== + version "0.14.54" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2" + integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA== optionalDependencies: - esbuild-android-arm64 "0.14.17" - esbuild-darwin-64 "0.14.17" - esbuild-darwin-arm64 "0.14.17" - esbuild-freebsd-64 "0.14.17" - esbuild-freebsd-arm64 "0.14.17" - esbuild-linux-32 "0.14.17" - esbuild-linux-64 "0.14.17" - esbuild-linux-arm "0.14.17" - esbuild-linux-arm64 "0.14.17" - esbuild-linux-mips64le "0.14.17" - esbuild-linux-ppc64le "0.14.17" - esbuild-linux-s390x "0.14.17" - esbuild-netbsd-64 "0.14.17" - esbuild-openbsd-64 "0.14.17" - esbuild-sunos-64 "0.14.17" - esbuild-windows-32 "0.14.17" - esbuild-windows-64 "0.14.17" - esbuild-windows-arm64 "0.14.17" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escalade@^3.2.0: + "@esbuild/linux-loong64" "0.14.54" + esbuild-android-64 "0.14.54" + esbuild-android-arm64 "0.14.54" + esbuild-darwin-64 "0.14.54" + esbuild-darwin-arm64 "0.14.54" + esbuild-freebsd-64 "0.14.54" + esbuild-freebsd-arm64 "0.14.54" + esbuild-linux-32 "0.14.54" + esbuild-linux-64 "0.14.54" + esbuild-linux-arm "0.14.54" + esbuild-linux-arm64 "0.14.54" + esbuild-linux-mips64le "0.14.54" + esbuild-linux-ppc64le "0.14.54" + esbuild-linux-riscv64 "0.14.54" + esbuild-linux-s390x "0.14.54" + esbuild-netbsd-64 "0.14.54" + esbuild-openbsd-64 "0.14.54" + esbuild-sunos-64 "0.14.54" + esbuild-windows-32 "0.14.54" + esbuild-windows-64 "0.14.54" + esbuild-windows-arm64 "0.14.54" + +escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== @@ -4732,7 +4784,7 @@ escalade@^3.2.0: escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^2.0.0: version "2.0.0" @@ -4745,14 +4797,13 @@ escape-string-regexp@^4.0.0: integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== dependencies: esprima "^4.0.1" estraverse "^5.2.0" esutils "^2.0.2" - optionator "^0.8.1" optionalDependencies: source-map "~0.6.1" @@ -4771,29 +4822,33 @@ eslint-plugin-jest@^24.1.0: "@typescript-eslint/experimental-utils" "^4.0.1" eslint-plugin-react-hooks@^4.1.2: - version "4.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz#318dbf312e06fab1c835a4abef00121751ac1172" - integrity sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA== + version "4.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz#c829eb06c0e6f484b3fbb85a97e57784f328c596" + integrity sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ== eslint-plugin-react@^7.21.3: - version "7.28.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz#8f3ff450677571a659ce76efc6d80b6a525adbdf" - integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw== - dependencies: - array-includes "^3.1.4" - array.prototype.flatmap "^1.2.5" + version "7.37.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz#567549e9251533975c4ea9706f986c3a64832031" + integrity sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" doctrine "^2.1.0" + es-iterator-helpers "^1.2.1" estraverse "^5.3.0" + hasown "^2.0.2" jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.0.4" - object.entries "^1.1.5" - object.fromentries "^2.0.5" - object.hasown "^1.1.0" - object.values "^1.1.5" - prop-types "^15.7.2" - resolve "^2.0.0-next.3" - semver "^6.3.0" - string.prototype.matchall "^4.0.6" + minimatch "^3.1.2" + object.entries "^1.1.8" + object.fromentries "^2.0.8" + object.values "^1.2.1" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" eslint-plugin-testing-library@^4.1.2: version "4.12.4" @@ -4895,9 +4950,9 @@ esprima@^4.0.0, esprima@^4.0.1: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -4931,7 +4986,7 @@ exec-sh@^0.3.2: execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -4987,17 +5042,17 @@ execa@^5.0.0: exenv@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" - integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= + integrity sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw== exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -5007,27 +5062,38 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" -expect@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.6.tgz#f335e128b0335b6ceb4fcab67ece7cbd14c942e6" - integrity sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag== +expect@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" + integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== + dependencies: + "@jest/types" "^27.5.1" + jest-get-type "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + +expect@^29.0.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== dependencies: - "@jest/types" "^27.4.2" - jest-get-type "^27.4.0" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -5054,7 +5120,7 @@ extglob@^2.0.4: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: version "1.4.1" @@ -5071,18 +5137,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.5, fast-glob@^3.2.7, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-glob@^3.3.2: +fast-glob@^3.2.5, fast-glob@^3.2.7, fast-glob@^3.2.9, fast-glob@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== @@ -5098,10 +5153,15 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== fastparse@^1.1.2: version "1.1.2" @@ -5109,20 +5169,20 @@ fastparse@^1.1.2: integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.18.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.18.0.tgz#d631d7e25faffea81887fe5ea8c9010e1b36fee0" + integrity sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw== dependencies: reusify "^1.0.4" fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== dependencies: bser "2.1.1" -figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: +figgy-pudding@^3.4.1, figgy-pudding@^3.5.1, figgy-pudding@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== @@ -5137,7 +5197,7 @@ file-entry-cache@^6.0.1: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -5154,7 +5214,7 @@ fill-range@^7.1.1: filter-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" - integrity sha1-mzERErxsYSehbgFsbF1/GeCAXFs= + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== find-npm-prefix@^1.0.2: version "1.0.2" @@ -5166,13 +5226,6 @@ find-root@^1.1.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -5189,17 +5242,18 @@ find-up@^4.0.0, find-up@^4.1.0: path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: - version "3.2.5" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" - integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +flatted@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.2.tgz#adba1448a9841bec72b42c532ea23dbbedef1a27" + integrity sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA== flush-promises@^1.0.2: version "1.0.2" @@ -5215,14 +5269,14 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" focus-visible@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.2.0.tgz#3a9e41fccf587bd25dcc2ef045508284f0a4d6b3" - integrity sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ== + version "5.2.1" + resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-5.2.1.tgz#38615e8be4d4df7819a0d9d92cdee4fda183ac96" + integrity sha512-8Bx950VD1bWTQJEH/AM6SpEk+SU55aVnp4Ujhuuxy3eMEBCRwBnTBnVXr9YAPvZL3/CNjCa8u4IWfNmEO53whA== fontfaceobserver@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.1.0.tgz#e2705d293e2c585a6531c2a722905657317a2991" - integrity sha512-ReOsO2F66jUa0jmv2nlM/s1MiutJx/srhAe2+TE8dJCMi02ZZOcCTxTCQFr3Yet+uODUtnr4Mewg+tNQ+4V1Ng== + version "2.3.0" + resolved "https://registry.yarnpkg.com/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz#5fb392116e75d5024b7ec8e4f2ce92106d1488c8" + integrity sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg== for-each@^0.3.3: version "0.3.3" @@ -5234,7 +5288,7 @@ for-each@^0.3.3: for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== foreground-child@^3.1.0: version "3.3.0" @@ -5247,12 +5301,12 @@ foreground-child@^3.1.0: forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + version "3.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.2.tgz#83ad9ced7c03feaad97e293d6f6091011e1659c8" + integrity sha512-sJe+TQb2vIaIyO783qN6BlMYWMw3WBOHA1Ay2qxsnjuafEOQFJ2JakedOQirT6D5XPRxDvS7AHYyem9fTpb4LQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" @@ -5275,14 +5329,14 @@ fraction.js@^4.3.7: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== dependencies: map-cache "^0.2.2" from2@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz#88413baaa5f9a597cfde9221d86986cd3c061dfd" - integrity sha1-iEE7qqX5pZfP3pIh2GmGzTwGHf0= + integrity sha512-1eKYoECvhpM4IT70THQV8XNfmZoIlnROymbwOSazfmQO3kK+zCV+LSqUDzl7gDo3MZddCFeVa9Zg3Hi6FXqcgg== dependencies: inherits "~2.0.1" readable-stream "~1.1.10" @@ -5290,15 +5344,15 @@ from2@^1.3.0: from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" fs-extra@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1" - integrity sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ== + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -5314,7 +5368,7 @@ fs-minipass@^1.2.7: fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: version "1.2.10" resolved "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz#b7629bec07a4031a2548fdf99f5ecf1cc8b31e36" - integrity sha1-t2Kb7AekAxolSP35n17PHMizHjY= + integrity sha512-bwbv1FcWYwxN1F08I1THN8nS4Qe/pGq0gM8dy1J34vpxxp3qgZKJPPaqex36RyZO0sD2J+2ocnbwC2d/OjYICQ== dependencies: graceful-fs "^4.1.2" path-is-inside "^1.0.1" @@ -5323,7 +5377,7 @@ fs-vacuum@^1.2.10, fs-vacuum@~1.2.10: fs-write-stream-atomic@^1.0.8, fs-write-stream-atomic@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + integrity sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA== dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -5335,25 +5389,32 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^2.1.2, fsevents@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -fsevents@~2.3.2: +fsevents@^2.1.2, fsevents@^2.3.2, fsevents@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -function-bind@^1.1.1, function-bind@^1.1.2: +function-bind@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== functions-have-names@^1.2.3: version "1.2.3" @@ -5363,7 +5424,7 @@ functions-have-names@^1.2.3: gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + integrity sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg== dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -5401,34 +5462,26 @@ gentle-fs@^2.3.0, gentle-fs@^2.3.1: read-cmd-shim "^1.0.1" slide "^1.1.6" -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" +get-intrinsic@^1.1.3, get-intrinsic@^1.2.2, get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.6.tgz#43dd3dd0e7b49b82b2dfcad10dc824bf7fc265d5" + integrity sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA== + dependencies: + call-bind-apply-helpers "^1.0.1" + dunder-proto "^1.0.0" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + function-bind "^1.1.2" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.0.0" get-package-type@^0.1.0: version "0.1.0" @@ -5448,7 +5501,7 @@ get-stdin@^9.0.0: get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" @@ -5469,23 +5522,24 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" @@ -5515,22 +5569,22 @@ glob@^10.3.10: package-json-from-dist "^1.0.0" path-scurry "^1.11.1" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== dependencies: ini "^1.3.4" @@ -5548,12 +5602,20 @@ globals@^11.1.0: integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: - version "13.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" - integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + globby@^11.0.3: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -5578,17 +5640,15 @@ globby@^12.0.0: merge2 "^1.4.1" slash "^4.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + integrity sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg== dependencies: create-error-class "^3.0.0" duplexer3 "^0.1.4" @@ -5602,15 +5662,15 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.10, graceful-fs@^4.2.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== graphql@^15.3.0: - version "15.8.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" - integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + version "15.9.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.9.0.tgz#4e8ca830cfd30b03d44d3edd9cac2b0690304b53" + integrity sha512-GCOQdvm7XxV1S4U4CGrsdlEN37245eC8P9zaYCMr6K1BG0IPGy5lUwmJsEOGyl1GD6HXjOtl2keCP9asRBwNvA== happy-dom@^15.11.7: version "15.11.7" @@ -5624,7 +5684,7 @@ happy-dom@^15.11.7: har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== har-validator@~5.1.3: version "5.1.5" @@ -5639,59 +5699,56 @@ harmony-reflect@^1.4.6: resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.1.1" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + es-define-property "^1.0.0" -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== +has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: - has-symbols "^1.0.2" + has-symbols "^1.0.3" has-unicode@^2.0.0, has-unicode@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -5700,7 +5757,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -5709,22 +5766,17 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== dependencies: is-number "^3.0.0" kind-of "^4.0.0" -has@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - -hasown@^2.0.2: +hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -5736,21 +5788,16 @@ headers-utils@^1.2.0: resolved "https://registry.yarnpkg.com/headers-utils/-/headers-utils-1.2.5.tgz#899d6a76b21bcbe18d6108f56136fdbd4f30c404" integrity sha512-DAzV5P/pk3wTU/8TLZN+zFTDv4Xa1QDTU8pRvovPetcOMbmqq8CwsAvZBLPZHH6usxyy31zMp7I4aCYb6XIf6w== -highlight.js@11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.2.0.tgz#a7e3b8c1fdc4f0538b93b2dc2ddd53a40c6ab0f0" - integrity sha512-JOySjtOEcyG8s4MLR2MNbLUyaXqUunmSnL2kdV/KuGJOmHZuAR5xC54Ko7goAXBWNhf09Vy3B+U7vR62UZ/0iw== +highlight.js@11.9.0: + version "11.9.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.9.0.tgz#04ab9ee43b52a41a047432c8103e2158a1b8b5b0" + integrity sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw== -highlight.js@^11.10.0: +highlight.js@^11.10.0, highlight.js@^11.9.0: version "11.11.1" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.11.1.tgz#fca06fa0e5aeecf6c4d437239135fabc15213585" integrity sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w== -highlight.js@^11.9.0: - version "11.9.0" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-11.9.0.tgz#04ab9ee43b52a41a047432c8103e2158a1b8b5b0" - integrity sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw== - highlightjs-bqn@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/highlightjs-bqn/-/highlightjs-bqn-0.0.1.tgz#2e007db225899d0325c6ad2afc86f41f28ee76c6" @@ -5762,9 +5809,9 @@ highlightjs-chapel@^0.1.0: integrity sha512-lnpOBA/5vAp3YkE0v9h1PsUsWq8nvMo/tMPaEsCUpu0dZhHiJmVj/1g315n4WS417onsYJhLERh54gmJuSbzJA== highlightjs-cobol@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/highlightjs-cobol/-/highlightjs-cobol-0.3.1.tgz#22ee6ca0f32f075b10bf768b4898523bf1af7764" - integrity sha512-BcAHY2v3IhY0pRD4bQUHi9jicWZE93SjeVDXiO53vjNtWWiBMeDlG9yA+a/2IjCBvCMqLLa8aEiZj3hTcTKOSg== + version "0.3.3" + resolved "https://registry.yarnpkg.com/highlightjs-cobol/-/highlightjs-cobol-0.3.3.tgz#b1e8a9cbec6cbb33df806f824906e53db5e23435" + integrity sha512-sdEHzA1UQM9Fjx6wMkWLq8VN70SHascq84aFJJzenOF2TwHE4nwtKCbhHGzOWQKN0AUnn0yAHfXQqaH8i2C8YA== dependencies: minimist ">=1.2.6" mkdirp "^1.0.4" @@ -5799,7 +5846,7 @@ highlightjs-zig@^1.0.2: hogan.js@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" - integrity sha1-TNnhq9QpQUbnZ55B14mHMrAse/0= + integrity sha512-RqGs4wavGYJWE07t35JQccByczmNUXQT0E12ZYV1VKYu5UiAU9lsos/yBAcf840+zrUQQxgVduCR5/B8nNtibg== dependencies: mkdirp "0.3.0" nopt "1.0.10" @@ -5853,7 +5900,7 @@ http-proxy-agent@^4.0.1: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -5868,9 +5915,9 @@ https-proxy-agent@^2.2.3: debug "^3.1.0" https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" @@ -5883,19 +5930,19 @@ human-signals@^2.1.0: humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: ms "^2.0.0" humps@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa" - integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao= + integrity sha512-E0eIbrFWUhwfXJmsbdjRQFQPrl5pTEoKlz163j1mTqqUnU9PgR4AgB8AIITzuB3vLBdxZXyZ9TDIrwB2OASz4g== husky@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9" - integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw== + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== i18next-resources-to-backend@^1.2.1: version "1.2.1" @@ -5935,7 +5982,7 @@ identity-obj-proxy@^3.0.0: iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + integrity sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA== iferr@^1.0.2: version "1.0.2" @@ -5955,14 +6002,14 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.4, ignore@^5.1.8, ignore@^5.1.9, ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== immer@^10.1.1: version "10.1.1" @@ -5980,20 +6027,20 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -6008,7 +6055,7 @@ infer-owner@^1.0.3, infer-owner@^1.0.4: inflight@^1.0.4, inflight@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -6037,81 +6084,67 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -internal-slot@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" ip-regex@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw== ip@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" + integrity sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA== -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== +is-accessor-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" + integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== dependencies: - kind-of "^6.0.0" + hasown "^2.0.0" is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-async-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.0.0.tgz#8e4418efd3e5d3a6ebb0164c05ef5afb69aa9646" + integrity sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA== + dependencies: + has-tostringtag "^1.0.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: - has-bigints "^1.0.1" + has-bigints "^1.0.2" is-binary-path@~2.1.0: version "2.1.0" @@ -6120,29 +6153,24 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-boolean-object@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.1.tgz#c20d0c654be05da4fbc23c562635c019e93daf89" + integrity sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-callable@^1.1.3: +is-callable@^1.1.3, is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-callable@^1.1.4, is-callable@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - is-ci@^1.0.10: version "1.2.1" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" @@ -6157,84 +6185,64 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-cidr@^3.0.0: +is-cidr@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.1.tgz#e92ef121bdec2782271a77ce487a8b8df3718ab7" integrity sha512-Gx+oErgq1j2jAKCR2Kbq0b3wbH0vQKqZ0wOlHxm0o56nq51Cs/DZA8oz9dMDhbHyHEGgJ86eTeVudtgMMOx3Mw== dependencies: cidr-regex "^2.0.10" -is-core-module@^2.13.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - -is-core-module@^2.16.0: +is-core-module@^2.13.0, is-core-module@^2.16.0: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" -is-core-module@^2.2.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - -is-core-module@^2.8.1: - version "2.13.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" - integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= +is-data-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" + integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== dependencies: - kind-of "^3.0.2" + hasown "^2.0.0" -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: - kind-of "^6.0.0" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" -is-date-object@^1.0.1, is-date-object@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + version "0.1.7" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" + integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" + integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extendable@^1.0.1: version "1.0.1" @@ -6248,17 +6256,24 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -6270,6 +6285,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -6280,37 +6302,33 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + integrity sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw== dependencies: global-dirs "^0.1.0" is-path-inside "^1.0.0" -is-map@^2.0.1, is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-map@^2.0.2, is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" - integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + integrity sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg== -is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== dependencies: kind-of "^3.0.2" @@ -6322,12 +6340,12 @@ is-number@^7.0.0: is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== dependencies: path-is-inside "^1.0.1" @@ -6346,93 +6364,93 @@ is-potential-custom-element-name@^1.0.1: is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-regex@^1.1.4, is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== -is-set@^2.0.1, is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - -is-shared-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" - integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== +is-set@^2.0.2, is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - has-symbols "^1.0.2" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" -is-typed-array@^1.1.10: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - which-typed-array "^1.1.11" + which-typed-array "^1.1.16" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-weakmap@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" - integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== -is-weakref@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.0.tgz#47e3472ae95a63fa9cf25660bcf0c181c39770ef" + integrity sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.2" -is-weakset@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" - integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-windows@^1.0.2: version "1.0.2" @@ -6442,12 +6460,12 @@ is-windows@^1.0.2: isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isarray@^2.0.5: version "2.0.5" @@ -6457,24 +6475,24 @@ isarray@^2.0.5: iserror@0.0.2, iserror@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/iserror/-/iserror-0.0.2.tgz#bd53451fe2f668b9f2402c1966787aaa2c7c0bf5" - integrity sha1-vVNFH+L2aLnyQCwZZnh6qix8C/U= + integrity sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== isomorphic-fetch@^3.0.0: version "3.0.0" @@ -6487,17 +6505,17 @@ isomorphic-fetch@^3.0.0: isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== dependencies: "@babel/core" "^7.12.3" "@babel/parser" "^7.14.7" @@ -6506,12 +6524,12 @@ istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: semver "^6.3.0" istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== dependencies: istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" + make-dir "^4.0.0" supports-color "^7.1.0" istanbul-lib-source-maps@^4.0.0: @@ -6524,13 +6542,25 @@ istanbul-lib-source-maps@^4.0.0: source-map "^0.6.1" istanbul-reports@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" - integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== dependencies: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" +iterator.prototype@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.4.tgz#4ae6cf98b97fdc717b7e159d79dc25f8fc9482f1" + integrity sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA== + dependencies: + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + reflect.getprototypeof "^1.0.8" + set-function-name "^2.0.2" + jackspeak@^3.1.2: version "3.4.3" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" @@ -6540,143 +6570,160 @@ jackspeak@^3.1.2: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jest-changed-files@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.4.2.tgz#da2547ea47c6e6a5f6ed336151bd2075736eb4a5" - integrity sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A== +jest-changed-files@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" + integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" execa "^5.0.0" throat "^6.0.1" -jest-circus@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.4.6.tgz#d3af34c0eb742a967b1919fbb351430727bcea6c" - integrity sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ== +jest-circus@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" + integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== dependencies: - "@jest/environment" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" dedent "^0.7.0" - expect "^27.4.6" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - pretty-format "^27.4.6" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.7.tgz#d00e759e55d77b3bcfea0715f527c394ca314e5a" - integrity sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw== +jest-cli@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" + integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== dependencies: - "@jest/core" "^27.4.7" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/core" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" exit "^0.1.2" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^27.4.7" - jest-util "^27.4.2" - jest-validate "^27.4.6" + jest-config "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" prompts "^2.0.1" yargs "^16.2.0" -jest-config@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.4.7.tgz#4f084b2acbd172c8b43aa4cdffe75d89378d3972" - integrity sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw== +jest-config@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" + integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== dependencies: "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.4.6" - "@jest/types" "^27.4.2" - babel-jest "^27.4.6" + "@jest/test-sequencer" "^27.5.1" + "@jest/types" "^27.5.1" + babel-jest "^27.5.1" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.1" - graceful-fs "^4.2.4" - jest-circus "^27.4.6" - jest-environment-jsdom "^27.4.6" - jest-environment-node "^27.4.6" - jest-get-type "^27.4.0" - jest-jasmine2 "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-runner "^27.4.6" - jest-util "^27.4.2" - jest-validate "^27.4.6" + graceful-fs "^4.2.9" + jest-circus "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-get-type "^27.5.1" + jest-jasmine2 "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runner "^27.5.1" + jest-util "^27.5.1" + jest-validate "^27.5.1" micromatch "^4.0.4" - pretty-format "^27.4.6" + parse-json "^5.2.0" + pretty-format "^27.5.1" slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" + integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== + dependencies: + chalk "^4.0.0" + diff-sequences "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-diff@^27.0.0, jest-diff@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" - integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== dependencies: chalk "^4.0.0" - diff-sequences "^27.4.0" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-docblock@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.4.0.tgz#06c78035ca93cbbb84faf8fce64deae79a59f69f" - integrity sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg== +jest-docblock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" + integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== dependencies: detect-newline "^3.0.0" -jest-each@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.4.6.tgz#e7e8561be61d8cc6dbf04296688747ab186c40ff" - integrity sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA== +jest-each@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" + integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" chalk "^4.0.0" - jest-get-type "^27.4.0" - jest-util "^27.4.2" - pretty-format "^27.4.6" - -jest-environment-jsdom@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz#c23a394eb445b33621dfae9c09e4c8021dea7b36" - integrity sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" + jest-get-type "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" + +jest-environment-jsdom@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" + integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.4.6" - jest-util "^27.4.2" + jest-mock "^27.5.1" + jest-util "^27.5.1" jsdom "^16.6.0" -jest-environment-node@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.4.6.tgz#ee8cd4ef458a0ef09d087c8cd52ca5856df90242" - integrity sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ== +jest-environment-node@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" + integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" - jest-mock "^27.4.6" - jest-util "^27.4.2" + jest-mock "^27.5.1" + jest-util "^27.5.1" + +jest-get-type@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" + integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== -jest-get-type@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" - integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== jest-haste-map@^26.6.2: version "26.6.2" @@ -6699,183 +6746,207 @@ jest-haste-map@^26.6.2: optionalDependencies: fsevents "^2.1.2" -jest-haste-map@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.6.tgz#c60b5233a34ca0520f325b7e2cc0a0140ad0862a" - integrity sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ== +jest-haste-map@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" + integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/graceful-fs" "^4.1.2" "@types/node" "*" anymatch "^3.0.3" fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^27.4.0" - jest-serializer "^27.4.0" - jest-util "^27.4.2" - jest-worker "^27.4.6" + graceful-fs "^4.2.9" + jest-regex-util "^27.5.1" + jest-serializer "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" micromatch "^4.0.4" walker "^1.0.7" optionalDependencies: fsevents "^2.3.2" -jest-jasmine2@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz#109e8bc036cb455950ae28a018f983f2abe50127" - integrity sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw== +jest-jasmine2@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" + integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== dependencies: - "@jest/environment" "^27.4.6" - "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/environment" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" co "^4.6.0" - expect "^27.4.6" + expect "^27.5.1" is-generator-fn "^2.0.0" - jest-each "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - pretty-format "^27.4.6" + jest-each "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-runtime "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" + pretty-format "^27.5.1" throat "^6.0.1" -jest-leak-detector@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz#ed9bc3ce514b4c582637088d9faf58a33bd59bf4" - integrity sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA== +jest-leak-detector@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" + integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== + dependencies: + jest-get-type "^27.5.1" + pretty-format "^27.5.1" + +jest-matcher-utils@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" + integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== dependencies: - jest-get-type "^27.4.0" - pretty-format "^27.4.6" + chalk "^4.0.0" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + pretty-format "^27.5.1" -jest-matcher-utils@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz#53ca7f7b58170638590e946f5363b988775509b8" - integrity sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA== +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== dependencies: chalk "^4.0.0" - jest-diff "^27.4.6" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" -jest-message-util@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.6.tgz#9fdde41a33820ded3127465e1a5896061524da31" - integrity sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA== +jest-message-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" + integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== dependencies: "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/stack-utils" "^2.0.0" chalk "^4.0.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^27.5.1" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" micromatch "^4.0.4" - pretty-format "^27.4.6" + pretty-format "^29.7.0" slash "^3.0.0" stack-utils "^2.0.3" -jest-mock@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.6.tgz#77d1ba87fbd33ccb8ef1f061697e7341b7635195" - integrity sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw== +jest-mock@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" + integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/node" "*" jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== jest-regex-util@^26.0.0: version "26.0.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== -jest-regex-util@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.4.0.tgz#e4c45b52653128843d07ad94aec34393ea14fbca" - integrity sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg== +jest-regex-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" + integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== -jest-resolve-dependencies@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz#fc50ee56a67d2c2183063f6a500cc4042b5e2327" - integrity sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw== +jest-resolve-dependencies@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" + integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== dependencies: - "@jest/types" "^27.4.2" - jest-regex-util "^27.4.0" - jest-snapshot "^27.4.6" + "@jest/types" "^27.5.1" + jest-regex-util "^27.5.1" + jest-snapshot "^27.5.1" -jest-resolve@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.6.tgz#2ec3110655e86d5bfcfa992e404e22f96b0b5977" - integrity sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw== +jest-resolve@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" + integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" jest-pnp-resolver "^1.2.2" - jest-util "^27.4.2" - jest-validate "^27.4.6" + jest-util "^27.5.1" + jest-validate "^27.5.1" resolve "^1.20.0" resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.4.6.tgz#1d390d276ec417e9b4d0d081783584cbc3e24773" - integrity sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg== - dependencies: - "@jest/console" "^27.4.6" - "@jest/environment" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" +jest-runner@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" + integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== + dependencies: + "@jest/console" "^27.5.1" + "@jest/environment" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-docblock "^27.4.0" - jest-environment-jsdom "^27.4.6" - jest-environment-node "^27.4.6" - jest-haste-map "^27.4.6" - jest-leak-detector "^27.4.6" - jest-message-util "^27.4.6" - jest-resolve "^27.4.6" - jest-runtime "^27.4.6" - jest-util "^27.4.2" - jest-worker "^27.4.6" + graceful-fs "^4.2.9" + jest-docblock "^27.5.1" + jest-environment-jsdom "^27.5.1" + jest-environment-node "^27.5.1" + jest-haste-map "^27.5.1" + jest-leak-detector "^27.5.1" + jest-message-util "^27.5.1" + jest-resolve "^27.5.1" + jest-runtime "^27.5.1" + jest-util "^27.5.1" + jest-worker "^27.5.1" source-map-support "^0.5.6" throat "^6.0.1" -jest-runtime@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.4.6.tgz#83ae923818e3ea04463b22f3597f017bb5a1cffa" - integrity sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/globals" "^27.4.6" - "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" +jest-runtime@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" + integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== + dependencies: + "@jest/environment" "^27.5.1" + "@jest/fake-timers" "^27.5.1" + "@jest/globals" "^27.5.1" + "@jest/source-map" "^27.5.1" + "@jest/test-result" "^27.5.1" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" chalk "^4.0.0" cjs-module-lexer "^1.0.0" collect-v8-coverage "^1.0.0" execa "^5.0.0" glob "^7.1.3" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-message-util "^27.4.6" - jest-mock "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" + graceful-fs "^4.2.9" + jest-haste-map "^27.5.1" + jest-message-util "^27.5.1" + jest-mock "^27.5.1" + jest-regex-util "^27.5.1" + jest-resolve "^27.5.1" + jest-snapshot "^27.5.1" + jest-util "^27.5.1" slash "^3.0.0" strip-bom "^4.0.0" @@ -6887,40 +6958,40 @@ jest-serializer@^26.6.2: "@types/node" "*" graceful-fs "^4.2.4" -jest-serializer@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.4.0.tgz#34866586e1cae2388b7d12ffa2c7819edef5958a" - integrity sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ== +jest-serializer@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" + integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== dependencies: "@types/node" "*" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" -jest-snapshot@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.4.6.tgz#e2a3b4fff8bdce3033f2373b2e525d8b6871f616" - integrity sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ== +jest-snapshot@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" + integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== dependencies: "@babel/core" "^7.7.2" "@babel/generator" "^7.7.2" "@babel/plugin-syntax-typescript" "^7.7.2" "@babel/traverse" "^7.7.2" "@babel/types" "^7.0.0" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/transform" "^27.5.1" + "@jest/types" "^27.5.1" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.1.5" babel-preset-current-node-syntax "^1.0.0" chalk "^4.0.0" - expect "^27.4.6" - graceful-fs "^4.2.4" - jest-diff "^27.4.6" - jest-get-type "^27.4.0" - jest-haste-map "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-util "^27.4.2" + expect "^27.5.1" + graceful-fs "^4.2.9" + jest-diff "^27.5.1" + jest-get-type "^27.5.1" + jest-haste-map "^27.5.1" + jest-matcher-utils "^27.5.1" + jest-message-util "^27.5.1" + jest-util "^27.5.1" natural-compare "^1.4.0" - pretty-format "^27.4.6" + pretty-format "^27.5.1" semver "^7.3.2" jest-util@^26.6.2: @@ -6935,41 +7006,53 @@ jest-util@^26.6.2: is-ci "^2.0.0" micromatch "^4.0.2" -jest-util@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" - integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== +jest-util@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" + integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" - graceful-fs "^4.2.4" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" picomatch "^2.2.3" -jest-validate@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.6.tgz#efc000acc4697b6cf4fa68c7f3f324c92d0c4f1f" - integrity sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ== +jest-validate@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" + integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== dependencies: - "@jest/types" "^27.4.2" + "@jest/types" "^27.5.1" camelcase "^6.2.0" chalk "^4.0.0" - jest-get-type "^27.4.0" + jest-get-type "^27.5.1" leven "^3.1.0" - pretty-format "^27.4.6" + pretty-format "^27.5.1" -jest-watcher@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.4.6.tgz#673679ebeffdd3f94338c24f399b85efc932272d" - integrity sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw== +jest-watcher@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" + integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== dependencies: - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" + "@jest/test-result" "^27.5.1" + "@jest/types" "^27.5.1" "@types/node" "*" ansi-escapes "^4.2.1" chalk "^4.0.0" - jest-util "^27.4.2" + jest-util "^27.5.1" string-length "^4.0.1" jest-worker@^26.6.2: @@ -6981,23 +7064,23 @@ jest-worker@^26.6.2: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" - integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== +jest-worker@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: "@types/node" "*" merge-stream "^2.0.0" supports-color "^8.0.0" jest@27: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.7.tgz#87f74b9026a1592f2da05b4d258e57505f28eca4" - integrity sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg== + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" + integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== dependencies: - "@jest/core" "^27.4.7" + "@jest/core" "^27.5.1" import-local "^3.0.2" - jest-cli "^27.4.7" + jest-cli "^27.5.1" jiti@^1.21.6: version "1.21.7" @@ -7005,9 +7088,9 @@ jiti@^1.21.6: integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== jquery@^3.2.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" - integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== + version "3.7.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" @@ -7025,7 +7108,7 @@ js-yaml@^3.13.1: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== jsdom@^16.6.0: version "16.7.0" @@ -7060,15 +7143,20 @@ jsdom@^16.6.0: ws "^7.4.6" xml-name-validator "^3.0.0" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-parse-better-errors@^1.0.0, json-parse-better-errors@^1.0.2: version "1.0.2" @@ -7098,19 +7186,17 @@ json-schema@0.4.0: json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== jsonfile@^6.0.1: version "6.1.0" @@ -7124,7 +7210,7 @@ jsonfile@^6.0.1: jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== jsprim@^1.2.2: version "1.4.2" @@ -7137,33 +7223,37 @@ jsprim@^1.2.2: verror "1.10.0" "jsx-ast-utils@^2.4.1 || ^3.0.0": - version "3.2.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b" - integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA== + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: - array-includes "^3.1.3" - object.assign "^4.1.2" + json-buffer "3.0.1" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== dependencies: is-buffer "^1.1.5" -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -7176,21 +7266,14 @@ kleur@^3.0.3: latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" - integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + integrity sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w== dependencies: package-json "^4.0.0" lazy-property@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz#84ddc4b370679ba8bd4cdcfa4c06b43d57111147" - integrity sha1-hN3Es3Bnm6i9TNz6TAa0PVcREUc= - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" + integrity sha512-O52TK7FHpBPzdtvc5GoF0EPLQIBMqrAupANPGBidPkrDpl9IXlzuma3T+m0o0OpkRVPmTu3SDoT7985lw4KbNQ== leven@^3.1.0: version "3.1.0" @@ -7205,14 +7288,6 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - libcipm@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz#dcea4919e10dfbce420327e63901613b9141bc89" @@ -7350,21 +7425,16 @@ libnpx@^10.2.4: lie@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha1-mkNrLMd0bKWd56QfpGmz77dr2H4= + integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== dependencies: immediate "~3.0.5" -lilconfig@^2.0.3, lilconfig@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" - integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== - -lilconfig@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.2.tgz#e4a7c3cb549e3a606c8dcc32e5ae1005e62c05cb" - integrity sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow== +lilconfig@^2.0.3, lilconfig@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== -lilconfig@^3.1.3: +lilconfig@^3.0.0, lilconfig@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== @@ -7374,16 +7444,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - localforage@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" @@ -7391,14 +7451,6 @@ localforage@^1.9.0: dependencies: lie "3.1.1" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -7414,12 +7466,12 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lock-verify@^2.0.2, lock-verify@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.1.tgz#81107948c51ed16f97b96ff8b60675affb243fc1" - integrity sha512-n0Zw2DVupKfZMazy/HIFVNohJ1z8fIoZ77WBnyyBGG6ixw83uJNyrbiJvvHWe1QKkGiBCjj8RCPlymltliqEww== +lock-verify@^2.0.2, lock-verify@^2.1.0, lock-verify@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.2.tgz#9e93c0999dc3cbbede4f16f9cfdaa93ead8c76ef" + integrity sha512-2CUNtr1ZSVKJHcYP8uEzafmmuyauCB5zZimj8TvQd/Lflt9kXVZs+8S+EbAzZLaVUDn8CYGmeC3DFGdYfnCzeQ== dependencies: - "@iarna/cli" "^1.2.0" + "@iarna/cli" "^2.1.0" npm-package-arg "^6.1.0" semver "^5.4.1" @@ -7430,33 +7482,60 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha512-bSYo8Pc/f0qAkr8fPJydpJjtrHiSynYfYBjtANIgXv5xEf1WlTC63dIDlgu0s9dmTvzRu1+JJTxcIAHe+sH0FQ== + lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" - integrity sha1-DrtE5FaBSveQXGIS+iybLVG4Qeg= + integrity sha512-Ja1YevpHZctlI5beLA7oc5KNDhGcPixFhcqSiORHNsp/1QTv7amAXzw+gu4YOvErqVlMVyIJGgtzeepCnnur0A== dependencies: lodash._createset "~4.0.0" lodash._root "~3.0.0" +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha512-2wlI0JRAGX8WEf4Gm1p/mv/SZ+jLijpj0jyaE/AXeuQphzCgD8ZQW4oSpoN8JAopujOFGU3KMuq7qfHBWlGpjQ== + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha512-S8dUjWr7SUT/X6TBIQ/OYoCHo1Stu1ZRy6uMUSKqzFnZp5G5RyQizSm6kvxD2Ewyy6AVfMg4AToeZzKfF99T5w== + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha512-ev5SP+iFpZOugyab/DEUQxUeZP5qyciVTlgQ1f4Vlw7VUcCD8fVnyIqVUEIaoFH9zjAqdgi69KiofzvVmda/ZQ== + dependencies: + lodash._getnative "^3.0.0" + lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" - integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= + integrity sha512-GTkC6YMprrJZCYU3zcqZj+jkXkrXzq3IPBcF/fIPpNEAB4hZEtXU8zp/RwKOvZl43NUmwDbyRk3+ZTbeRdEBXA== + +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA== lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= + integrity sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ== lodash.clonedeep@^4.5.0, lodash.clonedeep@~4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.isequal@^4.5.0: version "4.5.0" @@ -7466,32 +7545,37 @@ lodash.isequal@^4.5.0: lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw== + lodash.truncate@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== lodash.union@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== lodash.uniq@^4.5.0, lodash.uniq@~4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash.without@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" - integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= + integrity sha512-M3MefBwfDhgKgINVuBJCO1YR3+gf6s9HNJsIiZ/Ru77Ws6uTb9eBuvrkpzO+9iLoAaRodGuq7tyrPCx+74QYGQ== lodash@4.17.21, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.7.0, lodash@latest: version "4.17.21" @@ -7535,19 +7619,7 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= - -lz-string@^1.5.0: +lz-string@^1.4.4, lz-string@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== @@ -7559,12 +7631,12 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== dependencies: - semver "^6.0.0" + semver "^7.5.3" make-fetch-happen@^5.0.0: version "5.0.2" @@ -7593,12 +7665,12 @@ makeerror@1.0.12: map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== dependencies: object-visit "^1.0.0" @@ -7607,10 +7679,10 @@ marked@^0.4: resolved "https://registry.yarnpkg.com/marked/-/marked-0.4.0.tgz#9ad2c2a7a1791f10a852e0112f77b571dce10c66" integrity sha512-tMsdNBgOsrUophCAFQl0XPe6Zqk/uy9gnue+jIIKhykO51hxyu6uNx7zBPy0+y/WKYVZZMspV9YeXLNdKk+iYw== -marked@^4.0.10: - version "4.0.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.12.tgz#2262a4e6fd1afd2f13557726238b69a48b982f7d" - integrity sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ== +marked@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" + integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== match-sorter@^4.1.0: version "4.2.1" @@ -7620,23 +7692,21 @@ match-sorter@^4.1.0: "@babel/runtime" "^7.10.5" remove-accents "0.4.2" +math-intrinsics@^1.0.0, math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -meant@^1.0.2: +meant@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw== -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - memoize-one@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-6.0.0.tgz#b2591b871ed82948aee4727dc6abceeeac8c1045" @@ -7671,15 +7741,7 @@ micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -7687,22 +7749,17 @@ micromatch@^4.0.4, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" -mime-db@1.51.0: - version "1.51.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" - integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.34" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" - integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: - mime-db "1.51.0" - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + mime-db "1.52.0" mimic-fn@^2.1.0: version "2.1.0" @@ -7712,7 +7769,7 @@ mimic-fn@^2.1.0: min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== dependencies: dom-walk "^0.1.0" @@ -7721,7 +7778,7 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -minimatch@^3.0.4: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -7735,15 +7792,10 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" -minimist@>=1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" - integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@>=1.2.6, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" @@ -7792,14 +7844,14 @@ mixin-deep@^1.2.0: mkdirp@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4= + integrity sha512-OHsdUcVAQ6pOtg5JYWpCBo9W/GySVuwvP9hueRMW7UqshC0tbfzLv8wjySTPm3tfUZ/21CE9E1pJagOA91Pxew== -mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@^0.5.6, mkdirp@~0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" mkdirp@^1.0.4: version "1.0.4" @@ -7814,7 +7866,7 @@ mousetrap@^1.6.5: move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + integrity sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ== dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -7831,14 +7883,9 @@ mri@^1.1.4: ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@^2.0.0, ms@^2.1.1: +ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -7887,9 +7934,9 @@ mz@^2.7.0: thenify-all "^1.0.0" nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== + version "3.3.8" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" + integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== nanomatch@^1.2.9: version "1.2.13" @@ -7911,7 +7958,7 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== nice-try@^1.0.4: version "1.0.5" @@ -7933,13 +7980,13 @@ node-fetch-npm@^2.0.2: safe-buffer "^5.1.1" node-fetch@^2.6.1: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-gyp@^5.0.2, node-gyp@^5.1.0: +node-gyp@^5.0.2, node-gyp@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz#eb915f7b631c937d282e33aed44cb7a025f62a3e" integrity sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw== @@ -7959,28 +8006,18 @@ node-gyp@^5.0.2, node-gyp@^5.1.0: node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== node-match-path@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/node-match-path/-/node-match-path-0.4.4.tgz#516a10926093c0cc6f237d020685b593b19baebb" integrity sha512-pBq9gp7TG0r0VXuy/oeZmQsjBSnYQo7G886Ly/B3azRwZuEtHCY155dzmfoKWcDPGgyfIGD8WKVC7h3+6y7yTg== -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== - node-releases@^2.0.19: version "2.0.19" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== -node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== - node-request-interceptor@^0.5.1: version "0.5.9" resolved "https://registry.yarnpkg.com/node-request-interceptor/-/node-request-interceptor-0.5.9.tgz#f0498ae2889162523f58c1e1b4adc39f26e47163" @@ -7993,7 +8030,7 @@ node-request-interceptor@^0.5.1: nopt@1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" @@ -8005,7 +8042,7 @@ nopt@^4.0.1, nopt@^4.0.3: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: +normalize-package-data@^2.0.0, normalize-package-data@^2.4.0, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -8018,7 +8055,7 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.3.2, normalize-package- normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== dependencies: remove-trailing-separator "^1.0.1" @@ -8030,12 +8067,12 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@*: - version "7.0.3" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-7.0.3.tgz#12e56889f7a54b2d5b09616f36c442a9063f61af" - integrity sha512-RiCOdwdPnzvwcBFJE4iI1ss3dMVRIrEzFpn8ftje6iBfzBInqlnRrNhxcLwBEKjPPXQKzm1Ptlxtaiv9wdcj5w== + version "8.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.1.tgz#9b7d96af9836577c58f5883e939365fa15623a4a" + integrity sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w== normalize-url@^6.0.1: version "6.1.0" @@ -8060,7 +8097,7 @@ npm-bundled@^1.0.1: npm-cache-filename@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" - integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= + integrity sha512-5v2y1KG06izpGvZJDSBR5q1Ej+NaPDO05yAAWBJE6+3eiId0R176Gz3Qc2vEmJnE+VGul84g6Qpq8fXzD82/JA== npm-install-checks@^3.0.2: version "3.0.2" @@ -8146,7 +8183,7 @@ npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.7: npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" @@ -8170,9 +8207,9 @@ npm-user-validate@^1.0.1: integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== npm@^6.3.0: - version "6.14.16" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.16.tgz#a882d6b0b32d5212461f0c58719152add1a7b99a" - integrity sha512-LMiLGYsVNJfVPlQg7v2NYjG7iRIapcLv+oMunlq7fkXVx0BATCjRu7XyWl0G+iuZzHy4CjtM32QB8ox8juTgaw== + version "6.14.18" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.18.tgz#5cd431567f0961e1fe63d46738cf37f74f7999eb" + integrity sha512-p3SjqSchSuNQUqbJBgwdv0L3O6bKkaSfQrQzJsskNpNKLg0g37c5xTXFV0SqTlX9GWvoGxBELVJMRWq0J8oaLA== dependencies: JSONStream "^1.3.5" abbrev "~1.1.1" @@ -8181,9 +8218,9 @@ npm@^6.3.0: aproba "^2.0.0" archy "~1.0.0" bin-links "^1.1.8" - bluebird "^3.5.5" + bluebird "^3.7.2" byte-size "^5.0.1" - cacache "^12.0.3" + cacache "^12.0.4" call-limit "^1.1.1" chownr "^1.1.4" ci-info "^2.0.0" @@ -8191,18 +8228,18 @@ npm@^6.3.0: cli-table3 "^0.5.1" cmd-shim "^3.0.3" columnify "~1.5.4" - config-chain "^1.1.12" + config-chain "^1.1.13" detect-indent "~5.0.0" detect-newline "^2.1.0" - dezalgo "~1.0.3" + dezalgo "^1.0.4" editor "~1.0.0" - figgy-pudding "^3.5.1" + figgy-pudding "^3.5.2" find-npm-prefix "^1.0.2" fs-vacuum "~1.2.10" fs-write-stream-atomic "~1.0.10" gentle-fs "^2.3.1" - glob "^7.1.6" - graceful-fs "^4.2.4" + glob "^7.2.3" + graceful-fs "^4.2.10" has-unicode "~2.0.1" hosted-git-info "^2.8.9" iferr "^1.0.2" @@ -8211,7 +8248,7 @@ npm@^6.3.0: inherits "^2.0.4" ini "^1.3.8" init-package-json "^1.10.3" - is-cidr "^3.0.0" + is-cidr "^3.1.1" json-parse-better-errors "^1.0.2" lazy-property "~1.0.0" libcipm "^4.0.8" @@ -8222,7 +8259,7 @@ npm@^6.3.0: libnpmsearch "^2.0.2" libnpmteam "^1.0.2" libnpx "^10.2.4" - lock-verify "^2.1.0" + lock-verify "^2.2.2" lockfile "^1.0.4" lodash._baseuniq "~4.6.0" lodash.clonedeep "~4.5.0" @@ -8230,11 +8267,11 @@ npm@^6.3.0: lodash.uniq "~4.5.0" lodash.without "~4.4.0" lru-cache "^5.1.1" - meant "^1.0.2" + meant "^1.0.3" mississippi "^3.0.0" - mkdirp "^0.5.5" + mkdirp "^0.5.6" move-concurrently "^1.0.1" - node-gyp "^5.1.0" + node-gyp "^5.1.1" nopt "^4.0.3" normalize-package-data "^2.5.0" npm-audit-report "^1.3.3" @@ -8255,19 +8292,19 @@ npm@^6.3.0: path-is-inside "~1.0.2" promise-inflight "~1.0.1" qrcode-terminal "^0.12.0" - query-string "^6.8.2" - qw "~1.0.1" + query-string "^6.14.1" + qw "^1.0.2" read "~1.0.7" read-cmd-shim "^1.0.5" read-installed "~4.0.3" - read-package-json "^2.1.1" + read-package-json "^2.1.2" read-package-tree "^5.3.1" readable-stream "^3.6.0" readdir-scoped-modules "^1.1.0" - request "^2.88.0" + request "^2.88.2" retry "^0.12.0" rimraf "^2.7.1" - safe-buffer "^5.1.2" + safe-buffer "^5.2.1" semver "^5.7.1" sha "^3.0.0" slide "~1.1.6" @@ -8283,7 +8320,7 @@ npm@^6.3.0: unique-filename "^1.1.1" unpipe "~1.0.0" update-notifier "^2.5.0" - uuid "^3.3.3" + uuid "^3.4.0" validate-npm-package-license "^3.0.4" validate-npm-package-name "~3.0.0" which "^1.3.1" @@ -8301,21 +8338,21 @@ npmlog@^4.1.2, npmlog@~4.1.2: set-blocking "~2.0.0" nth-check@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + version "2.2.16" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.16.tgz#177760bba02c351df1d2644e220c31dfec8cdb43" + integrity sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ== oauth-sign@~0.9.0: version "0.9.0" @@ -8325,12 +8362,12 @@ oauth-sign@~0.9.0: object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" @@ -8341,20 +8378,20 @@ object-hash@^3.0.0: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-3.0.0.tgz#73f97f753e7baffc0e2cc9d6e079079744ac82e9" integrity sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== -object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" - integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-inspect@^1.13.3: + version "1.13.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.3.tgz#f14c183de51130243d6d18ae149375ff50ea488a" + integrity sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA== object-is@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" - integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + version "1.1.6" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" + integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" -object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -8362,85 +8399,75 @@ object-keys@^1.0.12, object-keys@^1.1.1: object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== dependencies: isobject "^3.0.0" -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== +object.assign@^4.1.4, object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" object-keys "^1.1.1" -object.entries@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861" - integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g== +object.entries@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41" + integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" -object.fromentries@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251" - integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw== +object.fromentries@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" + integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" object.getownpropertydescriptors@^2.0.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" - integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -object.hasown@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5" - integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.19.1" + version "2.1.8" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923" + integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A== + dependencies: + array.prototype.reduce "^1.0.6" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.2" + es-object-atoms "^1.0.0" + gopd "^1.0.1" + safe-array-concat "^1.1.2" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== dependencies: isobject "^3.0.1" -object.values@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac" - integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg== +object.values@^1.1.6, object.values@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" once@^1.3.0, once@^1.3.1, once@^1.4.0, once@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -8456,48 +8483,27 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== dependencies: deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" + word-wrap "^1.2.5" os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" @@ -8507,23 +8513,25 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +own-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== p-finally@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -8531,13 +8539,6 @@ p-limit@^2.0.0, p-limit@^2.2.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -8552,11 +8553,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -8570,7 +8566,7 @@ package-json-from-dist@^1.0.0: package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" - integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + integrity sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA== dependencies: got "^6.7.1" registry-auth-token "^3.0.1" @@ -8629,14 +8625,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -8654,12 +8643,12 @@ parse5@6.0.1: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -8674,19 +8663,19 @@ path-is-absolute@^1.0.0: path-is-inside@^1.0.1, path-is-inside@^1.0.2, path-is-inside@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6, path-parse@^1.0.7: +path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -8699,13 +8688,6 @@ path-scurry@^1.11.1: lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -8714,7 +8696,7 @@ path-type@^4.0.0: performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== picocolors@^0.2.1: version "0.2.1" @@ -8731,26 +8713,21 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pify@^2.0.0, pify@^2.3.0: +pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== -pirates@^4.0.1: +pirates@^4.0.1, pirates@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" @@ -8766,9 +8743,14 @@ pluralize@^8.0.0: posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== -postcss-calc@^8.2.0: +postcss-calc@^8.2.3: version "8.2.4" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== @@ -8794,42 +8776,43 @@ postcss-cli@^9.1.0: slash "^4.0.0" yargs "^17.0.0" -postcss-colormin@^5.2.5: - version "5.2.5" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.2.5.tgz#d1fc269ac2ad03fe641d462b5d1dada35c69968a" - integrity sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg== +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== dependencies: - browserslist "^4.16.6" + browserslist "^4.21.4" caniuse-api "^3.0.0" colord "^2.9.1" postcss-value-parser "^4.2.0" -postcss-convert-values@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz#3e74dd97c581f475ae7b4500bc0a7c4fb3a6b1b6" - integrity sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw== +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== dependencies: + browserslist "^4.21.4" postcss-value-parser "^4.2.0" -postcss-discard-comments@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz#011acb63418d600fdbe18804e1bbecb543ad2f87" - integrity sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q== +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== -postcss-discard-duplicates@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz#10f202a4cfe9d407b73dfea7a477054d21ea0c1f" - integrity sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw== +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== -postcss-discard-empty@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz#ec185af4a3710b88933b0ff751aa157b6041dd6a" - integrity sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA== +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== -postcss-discard-overridden@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz#cc999d6caf18ea16eff8b2b58f48ec3ddee35c9c" - integrity sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg== +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== postcss-flexbugs-fixes@^5.0.2: version "5.0.2" @@ -8869,11 +8852,11 @@ postcss-js@^4.0.1: camelcase-css "^2.0.1" postcss-load-config@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.1.tgz#2f53a17f2f543d9e63864460af42efdac0d41f87" - integrity sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg== + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-3.1.4.tgz#1ab2571faf84bb078877e1d07905eabe9ebda855" + integrity sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg== dependencies: - lilconfig "^2.0.4" + lilconfig "^2.0.5" yaml "^1.10.2" postcss-load-config@^4.0.2: @@ -8884,53 +8867,53 @@ postcss-load-config@^4.0.2: lilconfig "^3.0.0" yaml "^2.3.4" -postcss-merge-longhand@^5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz#090e60d5d3b3caad899f8774f8dccb33217d2166" - integrity sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg== +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== dependencies: postcss-value-parser "^4.2.0" - stylehacks "^5.0.3" + stylehacks "^5.1.1" -postcss-merge-rules@^5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz#26b37411fe1e80202fcef61cab027265b8925f2b" - integrity sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ== +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== dependencies: - browserslist "^4.16.6" + browserslist "^4.21.4" caniuse-api "^3.0.0" - cssnano-utils "^3.0.2" + cssnano-utils "^3.1.0" postcss-selector-parser "^6.0.5" -postcss-minify-font-values@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz#627d824406b0712243221891f40a44fffe1467fd" - integrity sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA== +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== dependencies: postcss-value-parser "^4.2.0" -postcss-minify-gradients@^5.0.6: - version "5.0.6" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz#b07cef51a93f075e94053fd972ff1cba2eaf6503" - integrity sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A== +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== dependencies: colord "^2.9.1" - cssnano-utils "^3.0.2" + cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-params@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz#86cb624358cd45c21946f8c317893f0449396646" - integrity sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg== +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== dependencies: - browserslist "^4.16.6" - cssnano-utils "^3.0.2" + browserslist "^4.21.4" + cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-selectors@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz#6ac12d52aa661fd509469d87ab2cebb0a1e3a1b5" - integrity sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ== +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== dependencies: postcss-selector-parser "^6.0.5" @@ -8949,96 +8932,96 @@ postcss-nesting@^10.0.3: "@csstools/selector-specificity" "^2.0.0" postcss-selector-parser "^6.0.10" -postcss-normalize-charset@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz#719fb9f9ca9835fcbd4fed8d6e0d72a79e7b5472" - integrity sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA== +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== -postcss-normalize-display-values@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz#94cc82e20c51cc4ffba6b36e9618adc1e50db8c1" - integrity sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ== +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz#4001f38c99675437b83277836fb4291887fcc6cc" - integrity sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ== +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz#d005adf9ee45fae78b673031a376c0c871315145" - integrity sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA== +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-string@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz#b5e00a07597e7aa8a871817bfeac2bfaa59c3333" - integrity sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ== +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-timing-functions@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz#47210227bfcba5e52650d7a18654337090de7072" - integrity sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g== +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-unicode@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz#02866096937005cdb2c17116c690f29505a1623d" - integrity sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig== +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== dependencies: - browserslist "^4.16.6" + browserslist "^4.21.4" postcss-value-parser "^4.2.0" -postcss-normalize-url@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz#c39efc12ff119f6f45f0b4f516902b12c8080e3a" - integrity sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ== +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== dependencies: normalize-url "^6.0.1" postcss-value-parser "^4.2.0" -postcss-normalize-whitespace@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz#1d477e7da23fecef91fc4e37d462272c7b55c5ca" - integrity sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw== +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== dependencies: postcss-value-parser "^4.2.0" -postcss-ordered-values@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz#e878af822a130c3f3709737e24cb815ca7c6d040" - integrity sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ== +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== dependencies: - cssnano-utils "^3.0.2" + cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-reduce-initial@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz#68891594defd648253703bbd8f1093162f19568d" - integrity sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA== +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== dependencies: - browserslist "^4.16.6" + browserslist "^4.21.4" caniuse-api "^3.0.0" -postcss-reduce-transforms@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz#717e72d30befe857f7d2784dba10eb1157863712" - integrity sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g== +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== dependencies: postcss-value-parser "^4.2.0" postcss-reporter@^7.0.0: - version "7.0.5" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.0.5.tgz#e55bd0fdf8d17e4f25fb55e9143fcd79349a2ceb" - integrity sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA== + version "7.1.0" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.1.0.tgz#5ec476d224e2fe25a054e3c66d9b2901d4fab422" + integrity sha512-/eoEylGWyy6/DOiMP5lmFRdmDKThqgn7D6hP2dXKJI/0rJSO1ADFNngZfDzxL0YAxFvws+Rtpuji1YIHj4mySA== dependencies: picocolors "^1.0.0" thenby "^1.3.4" @@ -9050,23 +9033,7 @@ postcss-reuse@^2.2.0: dependencies: css-selector-tokenizer "0.8.x" -postcss-selector-parser@^6.0.10: - version "6.0.13" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" - integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz#ee71c3b9ff63d9cd130838876c13a2ec1a992b2f" - integrity sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ== - dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" - -postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9, postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: version "6.1.2" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz#27ecb41fb0e3b6ba7a1ec84fff347f734c7929de" integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== @@ -9074,18 +9041,18 @@ postcss-selector-parser@^6.1.1, postcss-selector-parser@^6.1.2: cssesc "^3.0.0" util-deprecate "^1.0.2" -postcss-svgo@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.0.4.tgz#cfa8682f47b88f7cd75108ec499e133b43102abf" - integrity sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg== +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== dependencies: postcss-value-parser "^4.2.0" svgo "^2.7.0" -postcss-unique-selectors@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz#08e188126b634ddfa615fb1d6c262bafdd64826e" - integrity sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ== +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== dependencies: postcss-selector-parser "^6.0.5" @@ -9116,31 +9083,22 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== -prettier@>=1.10, prettier@^2.0.5: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" - integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== +prettier@>=1.10: + version "3.4.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" + integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== -pretty-format@^27.0.0, pretty-format@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" - integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" +prettier@^2.0.5: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-format@^27.0.2: +pretty-format@^27.0.2, pretty-format@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -9149,10 +9107,19 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + integrity sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A== pretty-quick@^2.0.1: version "2.0.2" @@ -9174,7 +9141,7 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== progress@^2.0.0: version "2.0.3" @@ -9184,20 +9151,20 @@ progress@^2.0.0: promise-inflight@^1.0.1, promise-inflight@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== promise-retry@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" - integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + integrity sha512-StEy2osPr28o17bIW776GtwO6+Q+M9zPiZkYfosciUUMYqjhU/ffwRAH0zN2+uvGyUsn8/YICIHRzLbPacpZGw== dependencies: err-code "^1.0.0" retry "^0.10.0" promise@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" - integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== dependencies: asap "~2.0.6" @@ -9212,7 +9179,7 @@ prompts@^2.0.1: promzard@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" - integrity sha1-JqXW7ox97kyxIggwWs+5O6OCqe4= + integrity sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw== dependencies: read "1" @@ -9228,7 +9195,7 @@ prop-types@^15.5.0, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2, proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== protoduck@^5.0.1: version "5.0.1" @@ -9240,17 +9207,19 @@ protoduck@^5.0.1: prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== psl@^1.1.28, psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" pump@^2.0.0: version "2.0.1" @@ -9261,9 +9230,9 @@ pump@^2.0.0: once "^1.3.1" pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -9277,10 +9246,10 @@ pumpify@^1.3.3: inherits "^2.0.3" pump "^2.0.0" -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== qrcode-terminal@^0.12.0: version "0.12.0" @@ -9288,18 +9257,18 @@ qrcode-terminal@^0.12.0: integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== qs@^6.9.6: - version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" - integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== + version "6.13.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.1.tgz#3ce5fc72bd3a8171b85c99b93c65dd20b7d1b16e" + integrity sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== -query-string@^6.8.2: +query-string@^6.14.1: version "6.14.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== @@ -9309,12 +9278,17 @@ query-string@^6.8.2: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -qw@~1.0.1: +qw@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/qw/-/qw-1.0.2.tgz#0c31a6f810320a91c58b05198679427103b03c4a" integrity sha512-1PhZ/iLKwlVNq45dnerTMKFjMof49uqli7/0QsvPNbX5OJ3IZ8msa9lUpvPheVdP+IYYPrf6cOaVil7S35joVA== @@ -9377,9 +9351,9 @@ react-error-boundary@^3.1.0: "@babel/runtime" "^7.12.5" react-fast-compare@^3.0.1, react-fast-compare@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== react-google-recaptcha@^2.1.0: version "2.1.0" @@ -9407,15 +9381,20 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +react-is@^18.0.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + react-lifecycles-compat@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== react-modal@^3.16.1: - version "3.16.1" - resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.16.1.tgz#34018528fc206561b1a5467fc3beeaddafb39b2b" - integrity sha512-VStHgI3BVcGo7OXczvnJN7yT2TWHJPDXZWyI/a0ssFNhGZWsPmB8cF0z33ewDXq4VfYMO1vXgiv/g8Nj9NDyWg== + version "3.16.3" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.16.3.tgz#c412d41915782e3c261253435d01468e2439b11b" + integrity sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw== dependencies: exenv "^1.2.0" prop-types "^15.7.2" @@ -9438,9 +9417,9 @@ react-query-devtools@^2.6.3: match-sorter "^4.1.0" react-select@^5.7.7: - version "5.7.7" - resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.7.7.tgz#dbade9dbf711ef2a181970c10f8ab319ac37fbd0" - integrity sha512-HhashZZJDRlfF/AKj0a0Lnfs3sRdw/46VJIRd8IbB9/Ovr74+ZIwkAdSBjSPXsFMG+u72c5xShqwLSKIJllzqw== + version "5.9.0" + resolved "https://registry.yarnpkg.com/react-select/-/react-select-5.9.0.tgz#41325b7bfe8452a8d401b82fc4fb7d44a03e29c5" + integrity sha512-nwRKGanVHGjdccsnzhFte/PULziueZxGD8LL2WojON78Mvnq7LdAMEtu2frrwld1fr3geixg3iiMBIc/LLAZpw== dependencies: "@babel/runtime" "^7.12.0" "@emotion/cache" "^11.4.0" @@ -9450,15 +9429,14 @@ react-select@^5.7.7: memoize-one "^6.0.0" prop-types "^15.6.0" react-transition-group "^4.3.0" - use-isomorphic-layout-effect "^1.1.2" + use-isomorphic-layout-effect "^1.2.0" react-simplemde-editor@^5: - version "5.0.2" - resolved "https://registry.yarnpkg.com/react-simplemde-editor/-/react-simplemde-editor-5.0.2.tgz#0e18cdc8f1e15824c595e6328d6808fcbceb75ce" - integrity sha512-yaqZSaUBf6B0kQY0mH8WP/nHnvJFz48aO8cMYCL1e/AFiuB/H8UDuyZFP9/exOtwVpaG373HYR1YedKMtCh+Kw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/react-simplemde-editor/-/react-simplemde-editor-5.2.0.tgz#7a4c8b97e4989cb129b45ba140145d71bdc0684e" + integrity sha512-GkTg1MlQHVK2Rks++7sjuQr/GVS/xm6y+HchZ4GPBWrhcgLieh4CjK04GTKbsfYorSRYKa0n37rtNSJmOzEDkQ== dependencies: - "@types/codemirror" "0.0.109" - "@types/marked" "^2.0.2" + "@types/codemirror" "~5.60.5" react-transition-group@^4.3.0: version "4.4.5" @@ -9494,7 +9472,7 @@ read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: read-installed@~4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz#ff9b8b67f187d1e4c29b9feb31f6b223acd19067" - integrity sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc= + integrity sha512-O03wg/IYuV/VtnK2h/KXEt9VIbMUFbk3ERG0Iu4FhLZw0EP0T9znqrYDGn6ncbEsXUFaUjiVAWXHzxwt3lhRPQ== dependencies: debuglog "^1.0.1" read-package-json "^2.0.0" @@ -9505,7 +9483,7 @@ read-installed@~4.0.3: optionalDependencies: graceful-fs "^4.1.2" -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== @@ -9524,34 +9502,17 @@ read-package-tree@^5.3.1: readdir-scoped-modules "^1.0.0" util-promisify "^2.1.0" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read@1, read@~1.0.1, read@~1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" - integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ== dependencies: mute-stream "~0.0.4" "readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -9562,9 +9523,9 @@ read@1, read@~1.0.1, read@~1.0.7: util-deprecate "~1.0.1" readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" @@ -9573,7 +9534,7 @@ readable-stream@^3.6.0: readable-stream@~1.1.10: version "1.1.14" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -9610,10 +9571,24 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" -regenerate-unicode-properties@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" - integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.8, reflect.getprototypeof@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz#c905f3386008de95a62315f3ea8630404be19e2f" + integrity sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + dunder-proto "^1.0.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + which-builtin-type "^1.2.1" + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" @@ -9622,20 +9597,20 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.13.7: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== regenerator-runtime@^0.14.0: - version "0.14.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" - integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" @@ -9647,39 +9622,32 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.3.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307" - integrity sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -regexp.prototype.flags@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" - integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== +regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz#b3ae40b1d2499b8350ab2c3fe6ef3845d3a96f42" + integrity sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - functions-have-names "^1.2.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.2" regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -regexpu-core@^4.7.1: - version "4.8.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" - integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: regenerate "^1.4.2" - regenerate-unicode-properties "^9.0.0" - regjsgen "^0.5.2" - regjsparser "^0.7.0" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" registry-auth-token@^3.0.1: version "3.4.0" @@ -9692,21 +9660,21 @@ registry-auth-token@^3.0.1: registry-url@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" - integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA== dependencies: rc "^1.0.1" -regjsgen@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== -regjsparser@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" - integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: - jsesc "~0.5.0" + jsesc "~3.0.2" remove-accents@0.4.2: version "0.4.2" @@ -9716,7 +9684,7 @@ remove-accents@0.4.2: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== repeat-element@^1.1.2: version "1.1.4" @@ -9726,9 +9694,9 @@ repeat-element@^1.1.2: repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== -request@^2.88.0: +request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -9757,23 +9725,23 @@ request@^2.88.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -9794,32 +9762,14 @@ resolve-from@^5.0.0: resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== - -resolve@^1.1.7: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" + version "1.1.1" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.1.tgz#05cfd5b3edf641571fd46fa608b610dda9ead999" + integrity sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ== -resolve@^1.22.8: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.8: version "1.22.10" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== @@ -9828,13 +9778,14 @@ resolve@^1.22.8: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== +resolve@^2.0.0-next.5: + version "2.0.0-next.5" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" + integrity sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" ret@~0.1.10: version "0.1.15" @@ -9844,12 +9795,12 @@ ret@~0.1.10: retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" - integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + integrity sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ== retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== reusify@^1.0.4: version "1.0.4" @@ -9890,10 +9841,21 @@ run-parallel@^1.1.9: run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + integrity sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg== dependencies: aproba "^1.1.1" +safe-array-concat@^1.1.2, safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" + isarray "^2.0.5" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -9904,10 +9866,27 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== dependencies: ret "~0.1.10" @@ -9948,36 +9927,51 @@ scheduler@^0.23.2: semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + integrity sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw== dependencies: semver "^5.0.3" "semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.2.1, semver@^7.3.2, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" +semver@^7.2.1, semver@^7.3.2, semver@^7.3.5, semver@^7.5.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" @@ -9999,7 +9993,7 @@ sha@^3.0.0: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" @@ -10013,26 +10007,57 @@ shebang-command@^2.0.0: shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.4, side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.6" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" - integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.0.1: version "4.1.0" @@ -10066,7 +10091,7 @@ slice-ansi@^4.0.0: slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + integrity sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw== smart-buffer@^4.1.0: version "4.2.0" @@ -10122,12 +10147,12 @@ socks@~2.3.2: sorted-object@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz#7d631f4bd3a798a24af1dffcfbfe83337a5df5fc" - integrity sha1-fWMfS9OnmKJK8d/8+/6DM3pd9fw= + integrity sha512-oKAAs26HeTu3qbawzUGCkTOBv/5MRrcuJyRWwbfEnWdpXnXsj+WEM3HTvarV73tMcf9uBEZNZoNDVRL62VLxzA== sorted-union-stream@~2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz#c7794c7e077880052ff71a8d4a2dbb4a9a638ac7" - integrity sha1-x3lMfgd4gAUv9xqNSi27Sppjisc= + integrity sha512-RaKskQJZkmVREIwyAFho1RRU+sKjDdg51Crvxg2VxmIyiIrNhPNoJD/by5/pklWBXAZoO6LfAAGv8xd47p9TnQ== dependencies: from2 "^1.3.0" stream-iterate "^1.1.0" @@ -10148,14 +10173,6 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - source-map-support@^0.5.6: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" @@ -10169,10 +10186,10 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" @@ -10180,22 +10197,22 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== spdx-expression-parse@^3.0.0: version "3.0.1" @@ -10206,9 +10223,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" - integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + version "3.0.20" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== split-on-first@^1.0.0: version "1.1.0" @@ -10225,12 +10242,12 @@ split-string@^3.0.1, split-string@^3.0.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== sshpk@^1.7.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -10255,28 +10272,28 @@ stable@^0.1.8: integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== stack-generator@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" - integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q== + version "2.0.10" + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.10.tgz#8ae171e985ed62287d4f1ed55a1633b3fb53bb4d" + integrity sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ== dependencies: - stackframe "^1.1.1" + stackframe "^1.3.4" stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== dependencies: escape-string-regexp "^2.0.0" -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== +stackframe@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.3.4.tgz#b881a004c8c149a5e8efef37d51b16e412943310" + integrity sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw== static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== dependencies: define-property "^0.2.5" object-copy "^0.1.0" @@ -10287,11 +10304,12 @@ statuses@^2.0.0: integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== dependencies: - internal-slot "^1.0.4" + es-errors "^1.3.0" + internal-slot "^1.1.0" stream-each@^1.1.0: version "1.2.3" @@ -10304,20 +10322,20 @@ stream-each@^1.1.0: stream-iterate@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz#2bd7c77296c1702a46488b8ad41f79865eecd4e1" - integrity sha1-K9fHcpbBcCpGSIuK1B95hl7s1OE= + integrity sha512-QVfGkdBQ8NzsSIiL3rV6AoFFWwMvlg1qpTwVQaMGY5XYThDUuNM4hYSzi8pbKlimTsWyQdaWRZE+jwlPsMiiZw== dependencies: readable-stream "^2.1.5" stream-shift "^1.0.0" stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" - integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== string-length@^4.0.1: version "4.0.2" @@ -10344,7 +10362,7 @@ string-similarity-js@^2.1.4: string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -10376,35 +10394,64 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.matchall@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa" - integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - get-intrinsic "^1.1.1" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" - side-channel "^1.0.4" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== dependencies: - call-bind "^1.0.2" define-properties "^1.1.3" + es-abstract "^1.17.5" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" string_decoder@^1.1.1: version "1.3.0" @@ -10416,7 +10463,7 @@ string_decoder@^1.1.1: string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== string_decoder@~1.1.1: version "1.1.1" @@ -10440,14 +10487,14 @@ stringify-package@^1.0.0, stringify-package@^1.0.1: strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== dependencies: ansi-regex "^3.0.0" @@ -10465,11 +10512,6 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -10478,7 +10520,7 @@ strip-bom@^4.0.0: strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== strip-final-newline@^2.0.0: version "2.0.0" @@ -10500,19 +10542,19 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-mod@^4.0.0, style-mod@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/style-mod/-/style-mod-4.1.2.tgz#ca238a1ad4786520f7515a8539d5a63691d7bf67" integrity sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw== -stylehacks@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.0.3.tgz#2ef3de567bfa2be716d29a93bf3d208c133e8d04" - integrity sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg== +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== dependencies: - browserslist "^4.16.6" + browserslist "^4.21.4" postcss-selector-parser "^6.0.4" stylis@4.2.0: @@ -10555,9 +10597,9 @@ supports-color@^8.0.0: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: has-flag "^4.0.0" supports-color "^7.0.0" @@ -10586,9 +10628,9 @@ symbol-tree@^3.2.4: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== table@^6.0.9: - version "6.8.0" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" - integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + version "6.9.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" + integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== dependencies: ajv "^8.0.1" lodash.truncate "^4.4.2" @@ -10640,7 +10682,7 @@ tar@^4.4.10, tar@^4.4.12, tar@^4.4.19: term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + integrity sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ== dependencies: execa "^0.7.0" @@ -10664,7 +10706,7 @@ test-exclude@^6.0.0: text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thenby@^1.3.4: version "1.3.4" @@ -10686,9 +10728,9 @@ thenify-all@^1.0.0: any-promise "^1.0.0" throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== + version "6.0.2" + resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.2.tgz#51a3fbb5e11ae72e2cf74861ed5c8020f89f29fe" + integrity sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ== through2@^2.0.0: version "2.0.5" @@ -10701,17 +10743,12 @@ through2@^2.0.0: "through@>=2.2.7 <3": version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== tiny-relative-date@^1.3.0: version "1.3.0" @@ -10730,22 +10767,17 @@ tmpl@1.0.5: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -10770,16 +10802,17 @@ to-regex@^3.0.1, to-regex@^3.0.2: toggle-selection@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" - integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= + integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" - universalify "^0.1.2" + universalify "^0.2.0" + url-parse "^1.5.3" tough-cookie@~2.5.0: version "2.5.0" @@ -10799,7 +10832,7 @@ tr46@^2.1.0: tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-interface-checker@^0.1.9: version "0.1.13" @@ -10826,14 +10859,14 @@ tsutils@^3.21.0: tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" @@ -10842,13 +10875,6 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - type-detect@4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -10864,6 +10890,51 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -10874,12 +10945,12 @@ typedarray-to-buffer@^3.1.5: typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typescript@^4.0.3: - version "4.5.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" - integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== typewriter-effect@^2.21.0: version "2.21.0" @@ -10890,49 +10961,54 @@ typewriter-effect@^2.21.0: raf "^3.4.1" typo-js@*: - version "1.2.1" - resolved "https://registry.yarnpkg.com/typo-js/-/typo-js-1.2.1.tgz#334a0d8c3f6c56f2f1e15fdf6c31677793cbbe9b" - integrity sha512-bTGLjbD3WqZDR3CgEFkyi9Q/SS2oM29ipXrWfDb4M74ea69QwKAECVceYpaBu0GfdnASMg9Qfl67ttB23nePHg== + version "1.2.5" + resolved "https://registry.yarnpkg.com/typo-js/-/typo-js-1.2.5.tgz#0aa65e0be9b69036463a3827de8185b4144e3086" + integrity sha512-F45vFWdGX8xahIk/sOp79z2NJs8ETMYsmMChm9D5Hlx3+9j7VnCyQyvij5MOCrNY3NNe8noSyokRjQRfq+Bc7A== ua-parser-js@^1.0.37: - version "1.0.37" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" - integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== + version "1.0.40" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.40.tgz#ac6aff4fd8ea3e794a6aa743ec9c2fc29e75b675" + integrity sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew== uid-number@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= + integrity sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w== umask@^1.1.0, umask@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" - integrity sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0= + integrity sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA== -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" underscore@^1.8.3: - version "1.13.2" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.2.tgz#276cea1e8b9722a8dbed0100a407dda572125881" - integrity sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g== + version "1.13.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" + integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" @@ -10942,15 +11018,15 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== union-value@^1.0.0: version "1.0.1" @@ -10979,29 +11055,29 @@ unique-slug@^2.0.0: unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== dependencies: crypto-random-string "^1.0.0" -universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -11009,7 +11085,7 @@ unset-value@^1.0.0: unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + integrity sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw== update-browserslist-db@^1.1.1: version "1.1.1" @@ -11019,7 +11095,7 @@ update-browserslist-db@^1.1.1: escalade "^3.2.0" picocolors "^1.1.0" -update-notifier@^2.2.0, update-notifier@^2.3.0, update-notifier@^2.5.0: +update-notifier@^2.3.0, update-notifier@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== @@ -11045,24 +11121,32 @@ uri-js@^4.2.2: urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== dependencies: prepend-http "^1.0.1" +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + use-is-mounted@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/use-is-mounted/-/use-is-mounted-1.0.0.tgz#9b92038aa43d5f9b429fec5bcb337f090da686b2" integrity sha512-hageAWvDBwxHxOgmMzVyT3xkJsj8jv3AUCEm0E1SAmPZ0rnTYal2CNhxVXvlV+orZ62NitsR5/va2djaP/iCLw== -use-isomorphic-layout-effect@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" - integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== +use-isomorphic-layout-effect@^1.1.2, use-isomorphic-layout-effect@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz#afb292eb284c39219e8cb8d3d62d71999361a21d" + integrity sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w== use-memory-value@^1.2.0: version "1.2.0" @@ -11070,9 +11154,9 @@ use-memory-value@^1.2.0: integrity sha512-q4V1dsRM68aaVBZ33msnKTqAfFWCt4nowAhlYqNGoSnRCJt1AFcDAbtgj7YvYQaGGtJNFW7U9MhYthCU09OMmg== use-sync-external-store@^1.0.0, use-sync-external-store@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" - integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + version "1.4.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.4.0.tgz#adbc795d8eeb47029963016cefdf89dc799fcebc" + integrity sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw== use@^3.1.0: version "3.1.1" @@ -11082,21 +11166,21 @@ use@^3.1.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== util-extend@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz#a7c216d267545169637b3b6edc6ca9119e2ff93f" - integrity sha1-p8IW0mdUUWljeztu3GypEZ4v+T8= + integrity sha512-mLs5zAK+ctllYBj+iAQvlDCwoxU/WDOUaJkcFudeiAX6OajC6BKXJUa9a+tbtkC11dz2Ufb7h0lyvIOVn4LADA== util-promisify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" - integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + integrity sha512-K+5eQPYs14b3+E+hmE2J6gCZ4JmMl9DbYS6BeP2CHq6WMuNxErxf5B/n0fz85L8zUuoO6rIzNNmIQDu/j+1OcA== dependencies: object.getownpropertydescriptors "^2.0.3" -uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -11107,9 +11191,9 @@ uuid@^8.3.1: integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== v8-to-istanbul@^8.1.0: version "8.1.1" @@ -11131,14 +11215,14 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: validate-npm-package-name@^3.0.0, validate-npm-package-name@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" - integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + integrity sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw== dependencies: builtins "^1.0.3" verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -11180,14 +11264,14 @@ warning@^4.0.2, warning@^4.0.3: wcwidth@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== dependencies: defaults "^1.0.3" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webidl-conversions@^5.0.0: version "5.0.0" @@ -11212,9 +11296,9 @@ whatwg-encoding@^1.0.5: iconv-lite "0.4.24" whatwg-fetch@^3.4.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz#dced24f37f2624ed0281725d51d0e2e3fe677f8c" - integrity sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA== + version "3.6.20" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz#580ce6d791facec91d37c72890995a0b48d31c70" + integrity sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg== whatwg-mimetype@^2.3.0: version "2.3.0" @@ -11229,7 +11313,7 @@ whatwg-mimetype@^3.0.0: whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" @@ -11243,42 +11327,62 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0: tr46 "^2.1.0" webidl-conversions "^6.1.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== +which-boxed-primitive@^1.0.2, which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" -which-collection@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" - integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.1, which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-map "^2.0.1" - is-set "^2.0.1" - is-weakmap "^2.0.1" - is-weakset "^2.0.1" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== -which-typed-array@^1.1.11, which-typed-array@^1.1.9: - version "1.1.11" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" - integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew== +which-typed-array@^1.1.13, which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.18" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" + integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" + gopd "^1.2.0" + has-tostringtag "^1.0.2" which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" @@ -11308,10 +11412,10 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== worker-farm@^1.6.0, worker-farm@^1.7.0: version "1.7.0" @@ -11329,14 +11433,6 @@ worker-farm@^1.6.0, worker-farm@^1.7.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -11380,14 +11476,14 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.4.6: - version "7.5.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" - integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + integrity sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ== xml-name-validator@^3.0.0: version "3.0.0" @@ -11400,20 +11496,15 @@ xmlchars@^2.2.0: integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xstate@^4.38.2: - version "4.38.2" - resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.38.2.tgz#1b74544fc9c8c6c713ba77f81c6017e65aa89804" - integrity sha512-Fba/DwEPDLneHT3tbJ9F3zafbQXszOlyCJyQqqdzmtlY/cwE2th462KK48yaANf98jHlP6lJvxfNtN0LFKXPQg== + version "4.38.3" + resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.38.3.tgz#4e15e7ad3aa0ca1eea2010548a5379966d8f1075" + integrity sha512-SH7nAaaPQx57dx6qvfcIgqKRXIh4L0A1iYEqim4s1u7c9VoCgzZc+63FY90AKU4ZzOC2cfJzTnpO4zK7fCUzzw== xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -11427,27 +11518,22 @@ y18n@^5.0.5: yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yaml@^1.10.0, yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== yaml@^2.3.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.0.tgz#14059ad9d0b1680d0f04d3a60fe00f3a857303c3" - integrity sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ== + version "2.6.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.6.1.tgz#42f2b1ba89203f374609572d5349fb8686500773" + integrity sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg== yargs-parser@^15.0.1: version "15.0.3" @@ -11462,17 +11548,10 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.0.0: - version "21.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55" - integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA== - -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= - dependencies: - camelcase "^4.1.0" +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== yargs@^14.2.3: version "14.2.3" @@ -11505,36 +11584,17 @@ yargs@^16.0.3, yargs@^16.2.0: yargs-parser "^20.2.2" yargs@^17.0.0: - version "17.3.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9" - integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA== + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^21.0.0" - -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" - integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= - dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - read-pkg-up "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" + yargs-parser "^21.1.1" zustand@^5.0.1: version "5.0.2" From aacf31b69fb5c69c7f45a52475bdbc1000b1fee4 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Mon, 30 Dec 2024 18:19:27 +0000 Subject: [PATCH 07/38] Rename stub --- .../projects/drawing/exercises/loops/{stub.jk => stub.jiki} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename bootcamp_content/projects/drawing/exercises/loops/{stub.jk => stub.jiki} (100%) diff --git a/bootcamp_content/projects/drawing/exercises/loops/stub.jk b/bootcamp_content/projects/drawing/exercises/loops/stub.jiki similarity index 100% rename from bootcamp_content/projects/drawing/exercises/loops/stub.jk rename to bootcamp_content/projects/drawing/exercises/loops/stub.jiki From 457933cffbd209e3640806a9921c8278a3443052 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Tue, 31 Dec 2024 21:34:00 +0000 Subject: [PATCH 08/38] Improve CSS --- app/css/bootcamp/components/codemirror.css | 151 +++++++------- app/css/bootcamp/components/prose.css | 13 +- app/css/bootcamp/components/scenario.css | 88 +++++++++ app/css/bootcamp/components/scrubber.css | 6 +- .../components/solve-exercise-page.css | 73 ++++++- app/css/bootcamp/components/test-buttons.css | 73 +++++-- app/css/bootcamp/exercises/draw.css | 3 +- app/css/bootcamp/exercises/maze.css | 2 +- app/css/bootcamp/variables.css | 2 +- app/css/packs/bootcamp-ui.css | 1 + app/css/ui-kit/buttons.css | 14 ++ app/images/bootcamp/logo.svg | 22 +-- app/images/icons/bootcamp-autorun.svg | 4 + app/images/icons/bootcamp-available.svg | 1 + app/images/icons/bootcamp-chevron-right.svg | 4 + .../icons/bootcamp-completed-check-circle.svg | 15 ++ app/images/icons/bootcamp-concepts.svg | 1 + app/images/icons/bootcamp-cross-red.svg | 1 + app/images/icons/bootcamp-fail.svg | 15 ++ app/images/icons/bootcamp-levels.svg | 29 +++ app/images/icons/bootcamp-lock.svg | 17 ++ app/images/icons/bootcamp-pass.svg | 12 ++ app/images/icons/bootcamp-play.svg | 4 + app/images/icons/bootcamp-scrubber.svg | 20 ++ app/images/icons/bootcamp-task-completed.svg | 11 ++ app/images/icons/bootcamp-task-pending.svg | 16 ++ app/images/icons/bootcamp-tick-green.svg | 1 + .../CodeMirror/extensions/lineHighlighter.ts | 2 +- .../ControlButtons/CheckScenariosButton.tsx | 34 ++-- .../ControlButtons/ControlButtons.tsx | 2 +- .../bootcamp/SolveExercisePage/Header.tsx | 79 ++++++++ .../Instructions/Instructions.tsx | 2 +- .../PreviousTestResultsButtons.tsx | 12 +- .../PreviousTestResultsView.tsx | 8 +- .../SolveExercisePage/Scrubber/Scrubber.tsx | 11 +- .../SolveExercisePage/SolveExercisePage.tsx | 58 +++--- .../TaskPreview/IOPreview.tsx | 2 +- .../TaskPreview/StatePreview.tsx | 17 +- .../TaskPreview/TaskPreview.tsx | 4 +- .../SolveExercisePage/TaskPreview/js.json | 184 ++++++++++++++++++ .../SolveExercisePage/Tasks/TaskList.tsx | 13 +- .../TestResultsView/CodeRun.tsx | 8 +- .../TestResultsView/FailInfo.tsx | 37 ++-- .../TestResultsView/IOTestResultView.tsx | 66 +++---- .../InspectedTestResultView.tsx | 20 +- .../TestResultsView/StateTestResultView.tsx | 2 +- .../TestResultsView/TestResultsButtons.tsx | 12 +- .../exercises/draw/DrawExercise.tsx | 1 - .../exercises/draw/shapes.ts | 4 + .../hooks/useOnRunCode/useOnRunCode.ts | 13 +- .../SolveExercisePage/hooks/useResize.tsx | 2 +- app/models/bootcamp/exercise.rb | 2 +- app/models/bootcamp/project.rb | 2 +- app/views/layouts/bootcamp-ui.haml | 27 +++ .../drawing/exercises/loops/config.json | 2 +- .../exercises/basic/{stub.jk => stub.jiki} | 0 .../exercises/basic/{stub.jk => stub.jiki} | 0 tailwind.config.js | 13 ++ 58 files changed, 969 insertions(+), 269 deletions(-) create mode 100644 app/css/bootcamp/components/scenario.css create mode 100644 app/images/icons/bootcamp-autorun.svg create mode 100644 app/images/icons/bootcamp-available.svg create mode 100644 app/images/icons/bootcamp-chevron-right.svg create mode 100644 app/images/icons/bootcamp-completed-check-circle.svg create mode 100644 app/images/icons/bootcamp-concepts.svg create mode 100644 app/images/icons/bootcamp-cross-red.svg create mode 100644 app/images/icons/bootcamp-fail.svg create mode 100644 app/images/icons/bootcamp-levels.svg create mode 100644 app/images/icons/bootcamp-lock.svg create mode 100644 app/images/icons/bootcamp-pass.svg create mode 100644 app/images/icons/bootcamp-play.svg create mode 100644 app/images/icons/bootcamp-scrubber.svg create mode 100644 app/images/icons/bootcamp-task-completed.svg create mode 100644 app/images/icons/bootcamp-task-pending.svg create mode 100644 app/images/icons/bootcamp-tick-green.svg create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Header.tsx create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/js.json rename bootcamp_content/projects/rock-paper-scissors/exercises/basic/{stub.jk => stub.jiki} (100%) rename bootcamp_content/projects/two-fer/exercises/basic/{stub.jk => stub.jiki} (100%) diff --git a/app/css/bootcamp/components/codemirror.css b/app/css/bootcamp/components/codemirror.css index 9e977e557f..e0cc3d8f55 100644 --- a/app/css/bootcamp/components/codemirror.css +++ b/app/css/bootcamp/components/codemirror.css @@ -1,87 +1,90 @@ -@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap"); +#bootcamp-solve-exercise-page { + .editor-wrapper { + overflow: hidden; + @apply h-[60%] flex-grow-0; + @apply rounded-5; + @apply border-2 border-bootcamp-light-purple; + } -.editor-wrapper { - overflow: hidden; - @apply h-[60%] flex-grow-0; - @apply rounded-br-3; - @apply border-1 border-slate-400; -} -.editor { - height: 100%; - background: #fff; - overflow-y: auto; - @apply flex flex-grow; + .editor { + height: 100%; + background: #fff; + overflow-y: auto; + @apply flex flex-grow; - .cm-gutters { - background: transparent; - @apply border-r-0; - } - .cm-lineNumbers .cm-gutterElement, - .cm-icon-container-gutter .cm-gutterElement { - @apply grid items-center; - /* @apply p-0; */ - } + .cm-gutters { + background: transparent; + @apply border-r-0; + } + .cm-lineNumbers .cm-gutterElement, + .cm-icon-container-gutter .cm-gutterElement { + @apply grid items-center; + /* @apply p-0; */ + } - .cm-icon-container-gutter .cm-gutterElement { - @apply px-4; - } - .cm-line { - padding: 2px 2px 2px 6px; + .cm-icon-container-gutter .cm-gutterElement { + @apply px-4; + } + .cm-line { + padding: 2px 2px 2px 6px; + } + .cm-lockedLine, + .cm-lockedGutter { + opacity: 0.6; + background: #eee; + } + .ͼ1 .cm-underline { + text-decoration: none; + border-bottom: 2px solid red; + background: rgba(255, 0, 0, 0.2); + } } - .cm-lockedLine, - .cm-lockedGutter { - opacity: 0.6; - background: #eee; - } - .ͼ1 .cm-underline { - text-decoration: none; - border-bottom: 2px solid red; - background: rgba(255, 0, 0, 0.2); - } -} -.cm-editor { - font-family: "Source Code Pro", "Courier New", Courier, monospace; - text-align: left; - width: 100%; - color: #aaa; - font-size: 16px; - - .cm-scroller { + .cm-editor { font-family: "Source Code Pro", "Courier New", Courier, monospace; + text-align: left; + width: 100%; + color: #aaa; + font-size: 16px; + + .cm-scroller { + font-family: "Source Code Pro", "Courier New", Courier, monospace; + } + .cm-foldGutter span { + display: none; + } + .cm-gutterElement { + @apply pl-2 pr-8; + } } - .cm-foldGutter span { - display: none; - } - .cm-gutterElement { - @apply pl-12 pr-8; + .cm-content { + outline: none !important; } -} -.declaration-arrow { - position: absolute; -} + .declaration-arrow { + position: absolute; + } -.cm-line { - display: flex; - align-items: center; -} + .cm-line { + /* display: flex; + align-items: center; */ + } -.custom-tooltip { - font-family: Poppins; - font-size: 14px; - padding: 4px; - color: #130b43; - line-height: 160%; - background: #ffd38f; - border-radius: 8px; -} + .custom-tooltip { + font-family: Poppins; + font-size: 14px; + padding: 4px; + color: #130b43; + line-height: 160%; + background: #ffd38f; + border-radius: 8px; + } -.cm-tooltip { - border: none !important; -} + .cm-tooltip { + border: none !important; + } -.cm-lineNumbers { - /* width: 2em; */ - text-align: right; + .cm-lineNumbers { + /* width: 2em; */ + text-align: right; + } } diff --git a/app/css/bootcamp/components/prose.css b/app/css/bootcamp/components/prose.css index 7adcf39a1c..1dcbffc01f 100644 --- a/app/css/bootcamp/components/prose.css +++ b/app/css/bootcamp/components/prose.css @@ -1,16 +1,21 @@ .c-prose { --prose-base-text-size: 19px; + --prose-h3-text-size: 22px; + --prose-h4-text-size: 20px; + &.c-prose-small { - --prose-base-text-size: 18px; + --prose-base-text-size: 17px; + --prose-h3-text-size: 21px; + --prose-h4-text-size: 18px; } h3 { - font-size: calc(var(--prose-base-text-size) + 3px); + font-size: var(--prose-h3-text-size); @apply leading-140; @apply font-semibold; } h4 { - font-size: calc(var(--prose-base-text-size) + 1px); + font-size: var(--prose-h4-text-size); @apply leading-140; @apply font-semibold; } @@ -47,7 +52,7 @@ @apply bg-blue-100; @apply py-2 px-4; @apply rounded-5; - font-size: calc(var(--prose-base-text-size) - 3px); + font-size: calc(var(--prose-base-text-size) - 1px); @apply whitespace-nowrap; } strong { diff --git a/app/css/bootcamp/components/scenario.css b/app/css/bootcamp/components/scenario.css new file mode 100644 index 0000000000..86f6df82a9 --- /dev/null +++ b/app/css/bootcamp/components/scenario.css @@ -0,0 +1,88 @@ +#bootcamp-solve-exercise-page { + .c-scenario { + @apply border-2 rounded-5; + @apply overflow-hidden; + @apply flex justify-between flex-grow; + + .scenario-lhs { + @apply border-r-2 border-bootcamp-light-purple; + @apply flex flex-col; + + .scenario-lhs-content { + @apply flex-grow; + @apply flex flex-col; + + @apply py-16 px-12; + + h3 { + @apply text-18 font-normal; + @apply mb-12; + strong { + @apply font-semibold; + } + } + p, + .content { + @apply text-16 leading-140; + @apply mb-8; + } + } + } + + &.pending { + @apply border-blue-300; + .scenario-lhs { + @apply bg-blue-100; + } + } + &.pass { + @apply border-bootcamp-success-dark; + .scenario-lhs { + @apply bg-bootcamp-success-light; + } + } + &.fail { + @apply border-bootcamp-fail-dark; + .scenario-lhs { + @apply bg-bootcamp-fail-light; + } + } + .io-test-result-info { + border-spacing: 6px; + border-collapse: separate; + tr { + th, + td { + @apply text-16 leading-140; + @apply bg-white; + @apply py-10 px-10; + } + th { + @apply rounded-l-5; + @apply text-left font-normal whitespace-nowrap; + @apply w-[1px]; + } + td { + @apply rounded-r-5; + @apply font-mono text-15; + + span.added-part { + @apply bg-bootcamp-success-light; + @apply border-b-1 border-bootcamp-success-dark; + } + span.removed-part { + @apply bg-bootcamp-fail-light; + @apply border-b-1 border-bootcamp-fail-dark; + } + } + } + } + } + + .scenario-rhs { + @apply h-fill overflow-auto; + @apply py-16 px-20; + h3 { + } + } +} diff --git a/app/css/bootcamp/components/scrubber.css b/app/css/bootcamp/components/scrubber.css index 285806d9b3..f3f283a768 100644 --- a/app/css/bootcamp/components/scrubber.css +++ b/app/css/bootcamp/components/scrubber.css @@ -1,12 +1,12 @@ #scrubber { background: white; padding: 8px; - @apply border-t-2 border-t-jiki-purple border-opacity-50; + @apply border-t-2 border-t-bootcamp-light-purple; @apply flex justify-center items-center gap-8; input[type="range"] { -webkit-appearance: none; - @apply flex-grow; + @apply flex-grow p-0; height: 9px; border-radius: 100px; border: 1px solid; @@ -22,7 +22,7 @@ @apply bg-jiki-purple; box-shadow: 0 0 1px 1px white; cursor: pointer; - background-image: url("/scrubber.svg"); + background-image: url("icons/bootcamp-scrubber.svg"); background-size: 13px; @apply bg-no-repeat bg-center; &:hover { diff --git a/app/css/bootcamp/components/solve-exercise-page.css b/app/css/bootcamp/components/solve-exercise-page.css index f98fd6a138..7cdc929799 100644 --- a/app/css/bootcamp/components/solve-exercise-page.css +++ b/app/css/bootcamp/components/solve-exercise-page.css @@ -1,6 +1,75 @@ #bootcamp-solve-exercise-page { - .scenario-lhs { - @apply w-[50%] max-w-[350px]; + @apply flex flex-col w-full h-screen; + + .page-header { @apply flex-shrink-0; + @apply py-8 px-12; + @apply flex; + @apply border-b-1 border-gray-300; + + .ident { + @apply flex items-center gap-8; + @apply text-16; + img { + @apply h-[20px]; + filter: invert(1); + } + } + } + .page-body { + @apply flex-grow; + @apply flex; + @apply overflow-hidden; + & > button { + @apply bg-bootcamp-light-purple; + @apply px-[2px]; + &:active { + @apply relative; + &:after { + @apply absolute top-0 bottom-0 left-[4px]; + @apply w-[3px]; + content: ""; + @apply bg-bootcamp-purple; + } + } + } + } + + .page-body-lhs { + @apply p-8; + @apply flex flex-col; + @apply bg-bootcamp-very-light-purple; + + & > button { + @apply h-[12px]; + &:active { + @apply relative; + &:after { + @apply absolute left-0 right-0 top-[5px]; + @apply h-[3px]; + content: ""; + @apply bg-bootcamp-purple; + } + } + } + } + .page-body-lhs-bottom { + @apply flex flex-col; + } + .page-body-rhs { + @apply flex-grow h-full; + } + + .scenario-lhs { + @apply w-[50%] min-w-[300px]; + @apply flex-shrink-0 flex-grow; + } + + .scenarios-button { + @apply flex items-center gap-8; + } + + .btn-primary { + @apply bg-bootcamp-purple; } } diff --git a/app/css/bootcamp/components/test-buttons.css b/app/css/bootcamp/components/test-buttons.css index 2cd698ea48..c65af9c40c 100644 --- a/app/css/bootcamp/components/test-buttons.css +++ b/app/css/bootcamp/components/test-buttons.css @@ -1,16 +1,67 @@ -.test-button { - @apply relative p-4 w-[32px] h-[32px] grid place-content-center rounded-5; - transition: background-color 0.3s ease-out; +#bootcamp-solve-exercise-page { + .test-button { + @apply relative p-4 w-[40px] h-[40px] grid place-content-center; + transition: background-color 0.3s ease-out; - &.idle { - background-color: #f59e0b; - } + @apply border-2 rounded-3; + @apply bg-no-repeat; - &.pass { - background-color: #22c55e; - } + &.idle { + @apply border-[#efefef]; + background-color: white; + &.selected { + @apply border-bootcamp-purple; + } + &:after { + @apply border-t-6 border-bootcamp-purple; + } + } + + &.pass { + border-color: #ddefe6; + @apply bg-bootcamp-success-light; + @apply text-bootcamp-success-dark; + background-image: url("icons/bootcamp-tick-green.svg"); + background-size: 12px; + background-position: 23px 2px; + &.selected { + @apply border-bootcamp-success-dark; + } + &:after { + @apply border-t-6 border-bootcamp-success-dark; + } + } + + &.fail { + border-color: #ffdddd; + background-color: #ffe5e5; /* Deliberately different to be more visible */ + @apply text-bootcamp-fail-text; + background-image: url("icons/bootcamp-cross-red.svg"); + background-size: 9px; + background-position: 25px 2px; + &.selected { + @apply border-bootcamp-fail-dark; + } + &:after { + @apply border-t-6 border-bootcamp-fail-dark; + } + } + + &.selected { + @apply relative; + @apply font-semibold; + + &:after { + content: ""; + + @apply absolute bottom-[-10px] left-[50%]; + transform: translateX(-50%); - &.fail { - background-color: #e11d48; + width: 0; + height: 0; + border-left: 6px solid transparent; + border-right: 6px solid transparent; + } + } } } diff --git a/app/css/bootcamp/exercises/draw.css b/app/css/bootcamp/exercises/draw.css index 2f28a3dd29..a6b51d7139 100644 --- a/app/css/bootcamp/exercises/draw.css +++ b/app/css/bootcamp/exercises/draw.css @@ -1,6 +1,7 @@ #bootcamp-solve-exercise-page { .exercise-draw { - @apply border-1 border-gray-500; + @apply border-1 border-[#efefef] rounded-5; + @apply bg-white; .bg-grid { @apply absolute inset-0; } diff --git a/app/css/bootcamp/exercises/maze.css b/app/css/bootcamp/exercises/maze.css index 061b382239..5a06749403 100644 --- a/app/css/bootcamp/exercises/maze.css +++ b/app/css/bootcamp/exercises/maze.css @@ -24,7 +24,7 @@ aspect-ratio: 1; max-height: 100cqh; max-width: 100cqw; - background: red; + background: white; position: relative; } } diff --git a/app/css/bootcamp/variables.css b/app/css/bootcamp/variables.css index 6ded0b84ce..e0a1d8b865 100644 --- a/app/css/bootcamp/variables.css +++ b/app/css/bootcamp/variables.css @@ -1,5 +1,5 @@ .bg-grad-basic { background-image: linear-gradient(#e1ebff, rgba(225, 235, 255, 0)); - background-size: 20%; + background-size: 100% 350px; background-repeat: repeat-x; } diff --git a/app/css/packs/bootcamp-ui.css b/app/css/packs/bootcamp-ui.css index 70174c68fe..f6752c88ae 100644 --- a/app/css/packs/bootcamp-ui.css +++ b/app/css/packs/bootcamp-ui.css @@ -17,6 +17,7 @@ @import "../bootcamp/components/tasks"; @import "../bootcamp/components/toggle-switch"; @import "../bootcamp/components/test-buttons"; +@import "../bootcamp/components/scenario"; @import "../bootcamp/components/project-widget"; @import "../bootcamp/components/exercise-widget"; diff --git a/app/css/ui-kit/buttons.css b/app/css/ui-kit/buttons.css index da7c981e3f..fa2de38cc3 100644 --- a/app/css/ui-kit/buttons.css +++ b/app/css/ui-kit/buttons.css @@ -179,6 +179,20 @@ } } + .btn-xxs { + @apply btn-i-base; + height: 24px; + @apply px-12 rounded-5; + @apply text-14; + + & > .c-icon { + height: 14px; + width: 14px; + } + & > .kb-shortcut { + @apply text-13; + } + } .btn-xs { @apply btn-i-base; height: 32px; diff --git a/app/images/bootcamp/logo.svg b/app/images/bootcamp/logo.svg index 718e457935..a2dd2edb7e 100644 --- a/app/images/bootcamp/logo.svg +++ b/app/images/bootcamp/logo.svg @@ -1,14 +1,8 @@ - \ No newline at end of file + + + + + + + + diff --git a/app/images/icons/bootcamp-autorun.svg b/app/images/icons/bootcamp-autorun.svg new file mode 100644 index 0000000000..6c4d66ffd1 --- /dev/null +++ b/app/images/icons/bootcamp-autorun.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/images/icons/bootcamp-available.svg b/app/images/icons/bootcamp-available.svg new file mode 100644 index 0000000000..8ae64e96ee --- /dev/null +++ b/app/images/icons/bootcamp-available.svg @@ -0,0 +1 @@ +Loading Line 1 Streamline Icon: https://streamlinehq.com \ No newline at end of file diff --git a/app/images/icons/bootcamp-chevron-right.svg b/app/images/icons/bootcamp-chevron-right.svg new file mode 100644 index 0000000000..9fa33bbfde --- /dev/null +++ b/app/images/icons/bootcamp-chevron-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/images/icons/bootcamp-completed-check-circle.svg b/app/images/icons/bootcamp-completed-check-circle.svg new file mode 100644 index 0000000000..5d265a5c53 --- /dev/null +++ b/app/images/icons/bootcamp-completed-check-circle.svg @@ -0,0 +1,15 @@ + + + + diff --git a/app/images/icons/bootcamp-concepts.svg b/app/images/icons/bootcamp-concepts.svg new file mode 100644 index 0000000000..97bde2f3fa --- /dev/null +++ b/app/images/icons/bootcamp-concepts.svg @@ -0,0 +1 @@ +Hierarchy 2 Streamline Icon: https://streamlinehq.comhierarchy-2 \ No newline at end of file diff --git a/app/images/icons/bootcamp-cross-red.svg b/app/images/icons/bootcamp-cross-red.svg new file mode 100644 index 0000000000..70399e8414 --- /dev/null +++ b/app/images/icons/bootcamp-cross-red.svg @@ -0,0 +1 @@ +Cross 2 Streamline Icon: https://streamlinehq.com \ No newline at end of file diff --git a/app/images/icons/bootcamp-fail.svg b/app/images/icons/bootcamp-fail.svg new file mode 100644 index 0000000000..3496d6d4c7 --- /dev/null +++ b/app/images/icons/bootcamp-fail.svg @@ -0,0 +1,15 @@ + + + + namur-failure + + + + + + + + \ No newline at end of file diff --git a/app/images/icons/bootcamp-levels.svg b/app/images/icons/bootcamp-levels.svg new file mode 100644 index 0000000000..c3632a6120 --- /dev/null +++ b/app/images/icons/bootcamp-levels.svg @@ -0,0 +1,29 @@ + + + + + educative-toys-alphabet + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/images/icons/bootcamp-lock.svg b/app/images/icons/bootcamp-lock.svg new file mode 100644 index 0000000000..d5dc186446 --- /dev/null +++ b/app/images/icons/bootcamp-lock.svg @@ -0,0 +1,17 @@ + + + + + lock-2 + + + + diff --git a/app/images/icons/bootcamp-pass.svg b/app/images/icons/bootcamp-pass.svg new file mode 100644 index 0000000000..834c6aae92 --- /dev/null +++ b/app/images/icons/bootcamp-pass.svg @@ -0,0 +1,12 @@ + + + + success + + + + + + + + \ No newline at end of file diff --git a/app/images/icons/bootcamp-play.svg b/app/images/icons/bootcamp-play.svg new file mode 100644 index 0000000000..5501cab1e6 --- /dev/null +++ b/app/images/icons/bootcamp-play.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/images/icons/bootcamp-scrubber.svg b/app/images/icons/bootcamp-scrubber.svg new file mode 100644 index 0000000000..25f0770889 --- /dev/null +++ b/app/images/icons/bootcamp-scrubber.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/images/icons/bootcamp-task-completed.svg b/app/images/icons/bootcamp-task-completed.svg new file mode 100644 index 0000000000..a64ad2b5e4 --- /dev/null +++ b/app/images/icons/bootcamp-task-completed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app/images/icons/bootcamp-task-pending.svg b/app/images/icons/bootcamp-task-pending.svg new file mode 100644 index 0000000000..94fd827c64 --- /dev/null +++ b/app/images/icons/bootcamp-task-pending.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/app/images/icons/bootcamp-tick-green.svg b/app/images/icons/bootcamp-tick-green.svg new file mode 100644 index 0000000000..9c90ed6afa --- /dev/null +++ b/app/images/icons/bootcamp-tick-green.svg @@ -0,0 +1 @@ +Check Streamline Icon: https://streamlinehq.com \ No newline at end of file diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/lineHighlighter.ts b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/lineHighlighter.ts index dd922cc315..f2919dab86 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/lineHighlighter.ts +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/extensions/lineHighlighter.ts @@ -12,7 +12,7 @@ import { RangeSetBuilder, } from '@codemirror/state' -export const INFO_HIGHLIGHT_COLOR = '#dadaff88' +export const INFO_HIGHLIGHT_COLOR = '#EFEDFF' export const ERROR_HIGHLIGHT_COLOR = '#fecaca88' export const changeLineEffect = StateEffect.define() diff --git a/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx index f896e0774e..6f8dfc6a5d 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx @@ -1,6 +1,7 @@ import React from 'react' import { assembleClassNames } from '@/utils/assemble-classnames' import useEditorStore from '../store/editorStore' +import { GraphicalIcon } from '@/components/common/GraphicalIcon' export function CheckScenariosButton({ handleRunCode, @@ -10,36 +11,23 @@ export function CheckScenariosButton({ const { toggleShouldAutoRunCode, shouldAutoRunCode, setShouldAutoRunCode } = useEditorStore() return ( -
{ handleRunCode() setShouldAutoRunCode(false) }} > Check Scenarios - -
+ /> + ) } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/ControlButtons.tsx b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/ControlButtons.tsx index 240fc794f1..dc90ba5f7f 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/ControlButtons.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/ControlButtons.tsx @@ -7,7 +7,7 @@ import { PreviousTestResultsButtons } from '../PreviousTestResultsView/PreviousT function _ControlButtons({ handleRunCode }: { handleRunCode: () => void }) { return ( -
+
diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Header.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Header.tsx new file mode 100644 index 0000000000..889fb02b3f --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Header.tsx @@ -0,0 +1,79 @@ +import React from 'react' +import useTaskStore from './store/taskStore/taskStore' +import { FinishLessonModal } from '@/components/bootcamp/modals/FinishLessonModal/FinishLessonModal' +import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' +import { assembleClassNames } from '@/utils/assemble-classnames' +import { FinishLessonModalContextWrapper } from '@/components/bootcamp/modals/FinishLessonModal/FinishLessonModalContextWrapper' +import { useTasks } from './Tasks/useTasks' +import { useContext } from 'react' +import { SolveExercisePageContext } from './SolveExercisePageContextWrapper' + +import { GraphicalIcon } from '@/components/common/GraphicalIcon' + +function _Header() { + const { + areAllTasksCompleted, + wasFinishLessonModalShown, + setWasFinishLessonModalShown, + } = useTaskStore() + + const { solution } = useContext(SolveExercisePageContext) + + const { + handleCompleteSolution, + isFinishModalOpen, + setIsFinishModalOpen, + modalView, + nextExerciseData, + } = useTasks({ + areAllTasksCompleted, + wasFinishLessonModalShown, + setWasFinishLessonModalShown, + }) + + return ( +
+
+ +
+ Exercism Bootcamp +
+
+
+ {solution.status === 'in_progress' && ( + <> + + {areAllTasksCompleted && ( + + + + )} + + )} + + +
+
+ ) +} + +export const Header = wrapWithErrorBoundary(_Header) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Instructions/Instructions.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Instructions/Instructions.tsx index d6af7b7e41..d7a5e08383 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/Instructions/Instructions.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/Instructions/Instructions.tsx @@ -40,7 +40,7 @@ export function _Instructions({ }, [currentTask]) return ( -
+

Instructions

{idx + 1} - ) })} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsView.tsx index 7d73ab0a22..6b3a4046de 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsView.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsView.tsx @@ -36,12 +36,8 @@ function _PreviousTestResultView({ exercise }: { exercise: Exercise }) { return (
diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/Scrubber.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/Scrubber.tsx index a69ee6db5c..4c033bd9f6 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/Scrubber.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/Scrubber/Scrubber.tsx @@ -4,6 +4,7 @@ import { calculateMaxInputValue, useScrubber } from './useScrubber' import useEditorStore from '@/components/bootcamp/SolveExercisePage/store/editorStore' import { TooltipInformation } from './ScrubberTooltipInformation' import { InformationWidgetToggleButton } from './InformationWidgetTiggleButton' +import { Icon } from '@/components/common' function Scrubber({ testResult }: { testResult: NewTestResult }) { const [isPlaying, setIsPlaying] = useState(false) @@ -101,7 +102,7 @@ function PlayButton({ }) { return ( ) } @@ -118,10 +119,14 @@ function FrameStepperButtons({ return (
) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx index 5a0e63b82f..8e9f5c7d5d 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx @@ -2,7 +2,6 @@ import React from 'react' import { useEditorHandler } from './CodeMirror/useEditorHandler' import { InspectedTestResultView } from './TestResultsView/InspectedTestResultView' -import { Tasks } from './Tasks/Tasks' import { Instructions } from './Instructions/Instructions' import { useSetupStores } from './hooks/useSetupStores' import { ControlButtons } from './ControlButtons/ControlButtons' @@ -12,6 +11,7 @@ import { Resizer, useResizablePanels } from './hooks/useResize' import { TaskPreview } from './TaskPreview/TaskPreview' import SolveExercisePageContextWrapper from './SolveExercisePageContextWrapper' import { PreviousTestResultView } from './PreviousTestResultsView/PreviousTestResultsView' +import { Header } from './Header' export default function SolveExercisePage({ exercise, @@ -51,34 +51,40 @@ export default function SolveExercisePage({ return ( -
- {/* LHS */} -
- - +
+
+
+ + + + + - - -
- - - - +
+ + + + +
+
+ + {/* RHS */} +
+ + {/* */}
-
- - {/* RHS */} -
- -
diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx index 57924a3e52..06fb9b63b7 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx @@ -1,7 +1,7 @@ import React from 'react' export function IOPreview({ firstTest }: { firstTest: TaskTest }) { return ( -
+

The first{' '} scenario is{' '} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx index 94b0577e11..dd29e9bca2 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx @@ -6,9 +6,18 @@ export function StatePreview({ config: Config }) { return ( -

- The first scenario{' '} - is {firstTest.name}. -

+
+
+

+ Scenario: + {firstTest.name} +

+

+ The first scenario is {firstTest.name}. The first scenario is{' '} + {firstTest.name}. The first scenario is {firstTest.name}. The first + scenario is {firstTest.name}. +

+
+
) } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx index cf0918b8b7..b0077ee72e 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx @@ -18,14 +18,14 @@ export function _TaskPreview({ exercise }: { exercise: Exercise }) { if (testSuiteResult || previousTestSuiteResult) return null return ( -
+
{exercise.config.testsType === 'io' ? ( ) : ( )}
-
+
) } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/js.json b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/js.json new file mode 100644 index 0000000000..42d684ab90 --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/js.json @@ -0,0 +1,184 @@ +// a partial javascript grammar in simple JSON format +{ + // prefix ID for regular expressions used in the grammar + "RegExpID": "RE::", + + // Style model + "Style": { + "comment": "comment", + "atom": "atom", + "keyword": "keyword", + "this": "keyword", + "builtin": "builtin", + "operator": "operator", + "identifier": "variable", + "property": "attribute", + "number": "number", + "string": "string", + "regex": "string-2" + }, + + // Lexical model + "Lex": { + "comment": { + "type": "comment", + "tokens": [ + // line comment + // start, end delims (null matches end-of-line) + ["//", null] + ] + }, + "identifier": "RE::/[_A-Za-z$][_A-Za-z0-9$]*/", + "this": "RE::/this\\b/", + "property": "RE::/[_A-Za-z$][_A-Za-z0-9$]*/", + "number": [ + // floats + "RE::/\\d*\\.\\d+(e[\\+\\-]?\\d+)?/", + "RE::/\\d+\\.\\d*/", + "RE::/\\.\\d+/", + // integers + // hex + "RE::/0x[0-9a-fA-F]+L?/", + // binary + "RE::/0b[01]+L?/", + // octal + "RE::/0o[0-7]+L?/", + // decimal + "RE::/[1-9]\\d*(e[\\+\\-]?\\d+)?L?/", + // just zero + "RE::/0(?![\\dx])/" + ], + "string": { + "type": "escaped-block", + "escape": "\\", + "tokens": + // start, end of string (can be the matched regex group ie. 1 ) + ["RE::/(['\"])/", 1] + }, + "regex": { + "type": "escaped-block", + "escape": "\\", + "tokens": + // javascript literal regular expressions can be parsed similar to strings + ["/", "RE::#/[gimy]{0,4}#"] + }, + "operator": { + "tokens": [ + "+", + "-", + "++", + "--", + "%", + ">>", + "<<", + ">>>", + "*", + "/", + "^", + "|", + "&", + "!", + "~", + ">", + "<", + "<=", + ">=", + "!=", + "!==", + "=", + "==", + "===", + "+=", + "-=", + "%=", + ">>=", + ">>>=", + "<<=", + "*=", + "/=", + "|=", + "&=" + ] + }, + "delimiter": { + "tokens": [ + "(", + ")", + "[", + "]", + "{", + "}", + ",", + "=", + ";", + "?", + ":", + "+=", + "-=", + "*=", + "/=", + "%=", + "&=", + "|=", + "^=", + "++", + "--", + ">>=", + "<<=" + ] + }, + "atom": { + "autocomplete": true, + "tokens": ["true", "false", "null", "undefined", "NaN", "Infinity"] + }, + "keyword": { + "autocomplete": true, + "tokens": [ + "if", + "function", + "with", + "do", + "else", + "equals", + "is", + "end", + "repeat" + ] + }, + "builtin": { + "autocomplete": true, + "tokens": [ + "Object", + "Function", + "Array", + "String", + "Date", + "Number", + "RegExp", + "Math", + "Exception", + "setTimeout", + "setInterval", + "parseInt", + "parseFloat", + "isFinite", + "isNan", + "alert", + "prompt", + "console", + "window", + "global", + "this" + ] + } + }, + + // Syntax model (optional) + "Syntax": { + "dot_property": { "sequence": [".", "property"] }, + "js": "comment | number | string | regex | keyword | operator | atom | (('}' | ')' | this | builtin | identifier | dot_property) dot_property*)" + }, + + // what to parse and in what order + "Parser": [["js"]] +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/TaskList.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/TaskList.tsx index 3451c23468..8e4565fd80 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/TaskList.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/TaskList.tsx @@ -2,6 +2,7 @@ import React from 'react' import LottieAnimation from '@/components/bootcamp/common/LottieAnimation' import useTaskStore from '../store/taskStore/taskStore' import confettiAnimation from '@/../animations/confetti.json' +import { Icon } from '@/components/common/Icon' export function TaskList({ tasks }: { tasks: Task[] }) { const { setCurrentTaskIndex } = useTaskStore() @@ -18,8 +19,16 @@ function Task({ task, onClick }: { task: Task; onClick: () => void }) { return (
- - + + {task.status == 'completed' && ( -
Code run:
-

{codeRun}

- + + Code run: + {codeRun} + ) } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx index f322537664..71f410cd04 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx @@ -11,18 +11,29 @@ export function FailInfo({ result: NewTestResult firstFailingExpect: ProcessedExpect | null }) { - return ( -
- - {firstFailingExpect ? ( - firstFailingExpect.testsType === 'state' ? ( - - ) : ( + if (!firstFailingExpect) { + return null + } + if (firstFailingExpect.testsType === 'state') { + return ( + <> +

+ The first scenario is ... The first scenario is ... The first scenario + is ... The first scenario is ... +

+ + + ) + } else { + return ( + <> + + - ) - ) : null} - - ) +
+ + ) + } } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/IOTestResultView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/IOTestResultView.tsx index b40e46c578..1411bc7c22 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/IOTestResultView.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/IOTestResultView.tsx @@ -3,39 +3,37 @@ import type { Change } from 'diff' export function IOTestResultView({ diff }: { diff: Change[] }) { return ( -
-
Expected:
-

- {diff.map((part, index) => - !part.added ? ( - - {part.value} - - ) : null - )} -

-
Actual:
-

- {diff.map((part, index) => - !part.removed ? ( - - {part.value} - - ) : null - )} -

-
+ <> + + Expected: + + {diff.map((part, index) => + !part.added ? ( + + {part.value} + + ) : null + )} + + + + Actual: + + {diff.map((part, index) => + !part.removed ? ( + + {part.value} + + ) : null + )} + + + ) } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx index 7aa97903ae..460db6217d 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx @@ -18,12 +18,8 @@ function _InspectedTestResultView() { return (
-
+
+
+

+ Scenario: + {result.name} +

+ + {/*

Scenario: {result.name} - {result.status} -

+ */} {result.status === 'fail' ? ( diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/StateTestResultView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/StateTestResultView.tsx index 41258957e4..ccf2ffe498 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/StateTestResultView.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/StateTestResultView.tsx @@ -6,7 +6,7 @@ export function StateTestResultView({ }) { return (
) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx index 3e7e9c114e..bf508ed961 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx @@ -5,7 +5,7 @@ import useEditorStore from '../store/editorStore' import type { InformationWidgetData } from '../CodeMirror/extensions/end-line-information/line-information' import { useShouldAnimate } from './useShouldAnimate' -const TRANSITION_DELAY = 0.2 +const TRANSITION_DELAY = 0.1 export function TestResultsButtons() { const { testSuiteResult, setInspectedTestResult, inspectedTestResult } = @@ -32,18 +32,10 @@ export function TestResultsButtons() { className={assembleClassNames( 'test-button', shouldAnimate ? test.status : 'idle', - inspectedTestResult?.name === test.name - ? 'outline outline-2 outline-slate-900' - : '' + inspectedTestResult?.name === test.name ? 'selected' : '' )} > {idx + 1} - ) })} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/DrawExercise.tsx b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/DrawExercise.tsx index a86c93faf2..310ee9443f 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/DrawExercise.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/DrawExercise.tsx @@ -56,7 +56,6 @@ export default class DrawExercise extends Exercise { super('draw') Object.assign(this.view.style, { - backgroundColor: '#fafaff', display: 'none', }) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/shapes.ts b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/shapes.ts index 19e7037d99..f98b3e7362 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/shapes.ts +++ b/app/javascript/components/bootcamp/SolveExercisePage/exercises/draw/shapes.ts @@ -12,6 +12,10 @@ export function rect( rect.style.backgroundColor = backgroundColor rect.style.width = width rect.style.height = height + rect.style.left = x + rect.style.top = y + rect.style.opacity = '0' + rect.style.position = 'absolute' return rect diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/useOnRunCode.ts b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/useOnRunCode.ts index 60d919df59..418b9613ae 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/useOnRunCode.ts +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useOnRunCode/useOnRunCode.ts @@ -19,8 +19,12 @@ export function useOnRunCode({ }: Pick & { config: Config }) { - const { setTestSuiteResult, setInspectedTestResult, inspectedTestResult } = - useTestStore() + const { + setTestSuiteResult, + setInspectedTestResult, + inspectedTestResult, + testSuiteResult, + } = useTestStore() const { setHighlightedLine, @@ -39,6 +43,11 @@ export function useOnRunCode({ console.error('tasks are missing in useRunCode') return } + // Clear out any old test results + testSuiteResult?.tests.forEach((test) => { + console.log(test.view) + test.view?.remove() + }) const exercise = getAndInitializeExerciseClass(config) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useResize.tsx b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useResize.tsx index 3c171859ac..6f8b3d6a71 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useResize.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useResize.tsx @@ -95,7 +95,7 @@ export function Resizer({ +
) diff --git a/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModal.tsx b/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModal.tsx index ba9be415f9..af85f7a780 100644 --- a/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModal.tsx +++ b/app/javascript/components/bootcamp/modals/FinishLessonModal/FinishLessonModal.tsx @@ -81,15 +81,13 @@ function CompletedExerciseView() { const { nextExerciseData } = useContext(FinishLessonModalContext) const { links } = useContext(SolveExercisePageContext) return ( -
+

Congratulations!

{nextExerciseData ? ( <> -

- The next exercise is {nextExerciseData.title}. -

-

+

The next exercise is {nextExerciseData.title}.

+

Do you want to start it, or would you rather go back to the projects list?

@@ -107,8 +105,8 @@ function CompletedExerciseView() { Continue )} - - See project list + + Back to dashboard
diff --git a/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts b/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts index 1be5643844..5eab858ae7 100644 --- a/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts +++ b/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts @@ -30,6 +30,7 @@ declare type SolveExercisePageProps = { postSubmission: string completeSolution: string projectsIndex: string + dashboardIndex: string } } From 84b136a8da98dc5465c265e8557610dc9adef82d Mon Sep 17 00:00:00 2001 From: Aron Demeter <66035744+dem4ron@users.noreply.github.com> Date: Mon, 6 Jan 2025 12:04:30 +0100 Subject: [PATCH 22/38] Add reset button (#7236) * Add reset functionality * Add localStorage to save editor value (#7239) --- .../bootcamp/solve_exercise_page.rb | 1 + .../CodeMirror/CodeMirror.tsx | 17 ++++++ .../CodeMirror/useEditorHandler.tsx | 13 +++++ .../SolveExercisePage/{ => Header}/Header.tsx | 9 ++-- .../SolveExercisePage/Header/ResetButton.tsx | 54 +++++++++++++++++++ .../SolveExercisePage/SolveExercisePage.tsx | 24 +++++---- .../SolveExercisePageContextWrapper.tsx | 6 ++- .../SolveExercisePage/hooks/useSetupStores.ts | 4 +- .../bootcamp/types/SolveExercisePage.d.ts | 1 + 9 files changed, 114 insertions(+), 15 deletions(-) rename app/javascript/components/bootcamp/SolveExercisePage/{ => Header}/Header.tsx (90%) create mode 100644 app/javascript/components/bootcamp/SolveExercisePage/Header/ResetButton.tsx diff --git a/app/helpers/react_components/bootcamp/solve_exercise_page.rb b/app/helpers/react_components/bootcamp/solve_exercise_page.rb index 14b4db66f3..72eb3d742c 100644 --- a/app/helpers/react_components/bootcamp/solve_exercise_page.rb +++ b/app/helpers/react_components/bootcamp/solve_exercise_page.rb @@ -30,6 +30,7 @@ def data }, test_results: submission&.test_results, code: { + stub: exercise.stub, # rename to `value` or similar? code.code is a bit confusing code: submission ? submission.code : exercise.stub, stored_at: submission&.created_at, diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx index e39eea9ab1..a57196d6d6 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx @@ -3,6 +3,8 @@ import React, { useEffect, forwardRef, type ForwardedRef, + useContext, + useMemo, } from 'react' import { EditorView, ViewUpdate } from '@codemirror/view' import { EditorState, Compartment } from '@codemirror/state' @@ -32,6 +34,9 @@ import useEditorStore from '../store/editorStore' import * as Ext from './extensions' import * as Hook from './hooks' import { INFO_HIGHLIGHT_COLOR } from './extensions/lineHighlighter' +import { useLocalStorage } from '@uidotdev/usehooks' +import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' +import { debounce } from 'lodash' export const readonlyCompartment = new Compartment() @@ -88,6 +93,15 @@ export const CodeMirror = forwardRef(function _CodeMirror( } = useEditorStore() const [textarea, setTextarea] = useState(null) + const { code } = useContext(SolveExercisePageContext) + const [_, setEditorLocalStorageValue] = useLocalStorage( + 'bootcamp-editor-value', + code.code + ) + + const updateLocalStorageValueOnDebounce = useMemo(() => { + return debounce((value: string) => setEditorLocalStorageValue(value), 500) + }, [setEditorLocalStorageValue]) let value = defaultCode @@ -169,6 +183,9 @@ export const CodeMirror = forwardRef(function _CodeMirror( ), onEditorChange( () => setHighlightedLine(0), + (e) => { + updateLocalStorageValueOnDebounce(e.state.doc.toString()) + }, () => setHighlightedLineColor(INFO_HIGHLIGHT_COLOR), () => setHasCodeBeenEdited(true), () => setUnderlineRange(undefined), diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx index c18bdb53e3..dce807924a 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx @@ -4,6 +4,7 @@ import { cleanUpEditor } from './extensions/clean-up-editor' import type { EditorView } from 'codemirror' import type { Handler } from './CodeMirror' import { updateReadOnlyRangesEffect } from './extensions/read-only-ranges/readOnlyRanges' +import { useLocalStorage } from '@uidotdev/usehooks' export function useEditorHandler({ links, @@ -12,6 +13,10 @@ export function useEditorHandler({ }: Pick & { config: Config }) { const editorHandler = useRef(null) const editorViewRef = useRef(null) + const [, setEditorLocalStorageValue] = useLocalStorage( + 'bootcamp-editor-value', + code.code + ) const [latestValueSnapshot, setLatestValueSnapshot] = useState< string | undefined @@ -27,6 +32,13 @@ export function useEditorHandler({ config, }) + const resetEditorToStub = () => { + if (editorHandler.current) { + setEditorLocalStorageValue(code.stub) + editorHandler.current.setValue(code.stub) + } + } + const handleRunCode = () => { if (editorViewRef.current) { cleanUpEditor(editorViewRef.current) @@ -45,6 +57,7 @@ export function useEditorHandler({ editorHandler, latestValueSnapshot, editorViewRef, + resetEditorToStub, } } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Header.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Header/Header.tsx similarity index 90% rename from app/javascript/components/bootcamp/SolveExercisePage/Header.tsx rename to app/javascript/components/bootcamp/SolveExercisePage/Header/Header.tsx index 02d4104f78..f7547d3f82 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/Header.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/Header/Header.tsx @@ -1,14 +1,15 @@ import React from 'react' -import useTaskStore from './store/taskStore/taskStore' +import useTaskStore from '../store/taskStore/taskStore' import { FinishLessonModal } from '@/components/bootcamp/modals/FinishLessonModal/FinishLessonModal' import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' import { assembleClassNames } from '@/utils/assemble-classnames' import { FinishLessonModalContextWrapper } from '@/components/bootcamp/modals/FinishLessonModal/FinishLessonModalContextWrapper' -import { useTasks } from './Tasks/useTasks' +import { useTasks } from '../Tasks/useTasks' import { useContext } from 'react' -import { SolveExercisePageContext } from './SolveExercisePageContextWrapper' +import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' import { GraphicalIcon } from '@/components/common/GraphicalIcon' +import { ResetButton } from './ResetButton' function _Header() { const { @@ -74,6 +75,8 @@ function _Header() { > Close + +
) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Header/ResetButton.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Header/ResetButton.tsx new file mode 100644 index 0000000000..7f942c0cca --- /dev/null +++ b/app/javascript/components/bootcamp/SolveExercisePage/Header/ResetButton.tsx @@ -0,0 +1,54 @@ +import React, { useCallback, useContext, useState } from 'react' +import Modal from 'react-modal' +import { assembleClassNames } from '@/utils/assemble-classnames' +import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' + +export function ResetButton() { + const [shouldOpenConfirmationModal, setShouldOpenConfirmationModal] = + useState(false) + const { resetEditorToStub } = useContext(SolveExercisePageContext) + + const handleResetEditorToStub = useCallback(() => { + resetEditorToStub() + setShouldOpenConfirmationModal(false) + }, [resetEditorToStub, setShouldOpenConfirmationModal]) + + return ( + <> + + + {/* @ts-ignore */} + +

Are you sure?

+

+ Are you sure you want to reset the exercise to the starting code? + You'll lose all your progress. +

+ +
+ + +
+
+ + ) +} diff --git a/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx index 8e9f5c7d5d..5f7823443b 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePage.tsx @@ -11,7 +11,7 @@ import { Resizer, useResizablePanels } from './hooks/useResize' import { TaskPreview } from './TaskPreview/TaskPreview' import SolveExercisePageContextWrapper from './SolveExercisePageContextWrapper' import { PreviousTestResultView } from './PreviousTestResultsView/PreviousTestResultsView' -import { Header } from './Header' +import { Header } from './Header/Header' export default function SolveExercisePage({ exercise, @@ -20,12 +20,16 @@ export default function SolveExercisePage({ solution, }: SolveExercisePageProps): JSX.Element { // this returns handleRunCode which is onRunCode but with studentCode passed in as an argument - const { handleEditorDidMount, handleRunCode, editorViewRef } = - useEditorHandler({ - links, - config: exercise.config, - code, - }) + const { + handleEditorDidMount, + handleRunCode, + editorViewRef, + resetEditorToStub, + } = useEditorHandler({ + links, + config: exercise.config, + code, + }) useSetupStores({ exercise, code }) const { @@ -50,9 +54,11 @@ export default function SolveExercisePage({ }) return ( - +
-
+
diff --git a/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper.tsx b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper.tsx index d571bb2754..94b24d3bfd 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/SolveExercisePageContextWrapper.tsx @@ -4,14 +4,16 @@ import { createContext } from 'react' type SolveExercisePageContextValues = Pick< SolveExercisePageProps, - 'links' | 'solution' | 'exercise' -> + 'links' | 'solution' | 'exercise' | 'code' +> & { resetEditorToStub: () => void } export const SolveExercisePageContext = createContext({ links: {} as SolveExercisePageContextValues['links'], solution: {} as SolveExercisePageContextValues['solution'], exercise: {} as SolveExercisePageContextValues['exercise'], + code: {} as SolveExercisePageContextValues['code'], + resetEditorToStub: () => {}, }) export default function SolveExercisePageContextWrapper({ diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts index 71f66dc3ad..0e40fbe951 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts @@ -2,6 +2,7 @@ import { useLayoutEffect } from 'react' import useEditorStore from '../store/editorStore' import useTaskStore from '../store/taskStore/taskStore' import useTestStore from '../store/testStore' +import { useLocalStorage } from '@uidotdev/usehooks' export function useSetupStores({ exercise, @@ -9,6 +10,7 @@ export function useSetupStores({ }: Pick) { const { setDefaultCode } = useEditorStore() const { initializeTasks } = useTaskStore() + const [editorValue] = useLocalStorage('bootcamp-editor-value', code.code) const { setPreviousTestSuiteResult, setInspectedPreviousTestResult } = useTestStore() @@ -56,7 +58,7 @@ export function useSetupStores({ } initializeTasks(exercise.tasks, previousTestSuiteResult) - setDefaultCode(code.code) + setDefaultCode(editorValue) }, [exercise, code]) } diff --git a/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts b/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts index 5eab858ae7..95340e2d7a 100644 --- a/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts +++ b/app/javascript/components/bootcamp/types/SolveExercisePage.d.ts @@ -1,4 +1,5 @@ type Code = { + stub: string code: string stored_at: Date | string | null readonlyRanges: { from: number; to: number }[] From 6ca5f299484df631db910d50dcd110f2d56704ae Mon Sep 17 00:00:00 2001 From: Aron Demeter <66035744+dem4ron@users.noreply.github.com> Date: Mon, 6 Jan 2025 12:14:57 +0100 Subject: [PATCH 23/38] Use config title to save editor value (#7240) --- .../bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx | 4 ++-- .../SolveExercisePage/CodeMirror/useEditorHandler.tsx | 2 +- .../bootcamp/SolveExercisePage/hooks/useSetupStores.ts | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx index a57196d6d6..7a76c970bf 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx @@ -93,9 +93,9 @@ export const CodeMirror = forwardRef(function _CodeMirror( } = useEditorStore() const [textarea, setTextarea] = useState(null) - const { code } = useContext(SolveExercisePageContext) + const { code, exercise } = useContext(SolveExercisePageContext) const [_, setEditorLocalStorageValue] = useLocalStorage( - 'bootcamp-editor-value', + 'bootcamp-editor-value-' + exercise.config.title, code.code ) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx index dce807924a..acc89925fe 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/useEditorHandler.tsx @@ -14,7 +14,7 @@ export function useEditorHandler({ const editorHandler = useRef(null) const editorViewRef = useRef(null) const [, setEditorLocalStorageValue] = useLocalStorage( - 'bootcamp-editor-value', + 'bootcamp-editor-value-' + config.title, code.code ) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts index 0e40fbe951..18faab7908 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts +++ b/app/javascript/components/bootcamp/SolveExercisePage/hooks/useSetupStores.ts @@ -10,7 +10,10 @@ export function useSetupStores({ }: Pick) { const { setDefaultCode } = useEditorStore() const { initializeTasks } = useTaskStore() - const [editorValue] = useLocalStorage('bootcamp-editor-value', code.code) + const [editorValue] = useLocalStorage( + 'bootcamp-editor-value-' + exercise.config.title, + code.code + ) const { setPreviousTestSuiteResult, setInspectedPreviousTestResult } = useTestStore() From c7885bbb30c4e6061eb52ee4046798416a2d1082 Mon Sep 17 00:00:00 2001 From: Aron Demeter <66035744+dem4ron@users.noreply.github.com> Date: Mon, 6 Jan 2025 13:47:11 +0100 Subject: [PATCH 24/38] Import jikiscript (#7241) --- .../bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx | 3 ++- package.json | 1 + yarn.lock | 8 ++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx index 7a76c970bf..bf767cbeda 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/CodeMirror/CodeMirror.tsx @@ -37,6 +37,7 @@ import { INFO_HIGHLIGHT_COLOR } from './extensions/lineHighlighter' import { useLocalStorage } from '@uidotdev/usehooks' import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' import { debounce } from 'lodash' +import { jikiscript } from 'codemirror-lang-jikiscript' export const readonlyCompartment = new Compartment() @@ -165,7 +166,7 @@ export const CodeMirror = forwardRef(function _CodeMirror( ...lintKeymap, indentWithTab, ]), - javascript(), + jikiscript(), Ext.highlightLine(highlightedLine), Ext.showInfoWidgetField, Ext.informationWidgetDataField, diff --git a/package.json b/package.json index 3eeea1aeb3..358a4f2d06 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "@exercism/highlightjs-arturo": "^0.0.2", "@exercism/highlightjs-gdscript": "^0.0.1", "@exercism/highlightjs-uiua": "^0.0.4", + "codemirror-lang-jikiscript": "dem4ron/codemirror-lang-jikiscript#jikify", "@exercism/twine2-story-format": "https://github.com/exercism/twine2-story-format.git", "@floating-ui/dom": "^1.6.12", "@gleam-lang/highlight.js-gleam": "^1.0.0", diff --git a/yarn.lock b/yarn.lock index c599b47d1c..cef8bf3306 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3612,6 +3612,14 @@ code-point-at@^1.0.0: version "3.0.1" resolved "https://github.com/sachinraja/codemirror-lang-elixir#bc0e5af9a57aa5b4cff33bd83aea753106079354" +codemirror-lang-jikiscript@dem4ron/codemirror-lang-jikiscript#jikify: + version "0.0.1" + resolved "https://codeload.github.com/dem4ron/codemirror-lang-jikiscript/tar.gz/9b6e10b44132a392ec50c6a03f9b021bccb69817" + dependencies: + "@codemirror/language" "^6.10.1" + "@lezer/highlight" "^1.2.0" + "@lezer/lr" "^1.4.0" + codemirror-lang-jq@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/codemirror-lang-jq/-/codemirror-lang-jq-1.0.0.tgz#6865885dea031a0c4e405a0961c071e436c090a4" From a2cc93a9bb191b205c58565ef3ec13694e997c72 Mon Sep 17 00:00:00 2001 From: Aron Demeter <66035744+dem4ron@users.noreply.github.com> Date: Mon, 6 Jan 2025 15:55:56 +0100 Subject: [PATCH 25/38] Hide scrollbar on `edit` page (#7242) --- app/css/bootcamp/components/solve-exercise-page.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/css/bootcamp/components/solve-exercise-page.css b/app/css/bootcamp/components/solve-exercise-page.css index 7cdc929799..32fbf2f469 100644 --- a/app/css/bootcamp/components/solve-exercise-page.css +++ b/app/css/bootcamp/components/solve-exercise-page.css @@ -73,3 +73,7 @@ @apply bg-bootcamp-purple; } } + +body.namespace-bootcamp.controller-exercises.action-edit { + overflow: hidden; +} From 0760ac802bb81e54cef324f33098d4604ac723b6 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Wed, 8 Jan 2025 03:06:27 +0900 Subject: [PATCH 26/38] Add change keyword (#7243) --- app/css/bootcamp/exercises/draw.css | 1 + app/javascript/interpreter/executor.ts | 17 +++- app/javascript/interpreter/expression.ts | 1 + app/javascript/interpreter/frames.ts | 10 ++- .../languages/jikiscript/parser.ts | 45 ++++++++++- .../languages/jikiscript/scanner.ts | 1 + .../interpreter/languages/jikiscript/token.ts | 1 + app/javascript/interpreter/resolver.ts | 8 +- .../languages/jikiscript/interpreter.test.ts | 78 +++++++++++++++++-- 9 files changed, 146 insertions(+), 16 deletions(-) diff --git a/app/css/bootcamp/exercises/draw.css b/app/css/bootcamp/exercises/draw.css index a6b51d7139..f0b40c95b0 100644 --- a/app/css/bootcamp/exercises/draw.css +++ b/app/css/bootcamp/exercises/draw.css @@ -7,6 +7,7 @@ } .canvas { @apply absolute inset-0; + @apply overflow-hidden; width: 100%; height: 100%; } diff --git a/app/javascript/interpreter/executor.ts b/app/javascript/interpreter/executor.ts index c482c6d3bd..4b04c49b57 100644 --- a/app/javascript/interpreter/executor.ts +++ b/app/javascript/interpreter/executor.ts @@ -205,6 +205,11 @@ export class Executor public visitVariableStatement(statement: VariableStatement): void { this.executeFrame(statement, () => { + if (this.environment.inScope(statement.name.lexeme)) { + this.error('VariableAlreadyDeclared', statement.location, { + name: statement.name.lexeme, + }) + } const result = this.evaluate(statement.initializer) const updating = this.environment.inScope(statement.name.lexeme) this.environment.define(statement.name.lexeme, result.value) @@ -722,9 +727,19 @@ export class Executor } public visitAssignExpression(expression: AssignExpression): EvaluationResult { + // Ensure the variable resolves if we're updating + // and doesn't resolve if we're declaring + if (expression.updating) { + if (!this.environment.inScope(expression.name.lexeme)) { + this.error('VariableNotDeclared', expression.location, { + name: expression.name.lexeme, + }) + } + } + const value = this.evaluate(expression.value) const newValue = - expression.operator.type === 'EQUAL' + expression.operator.type === 'EQUAL' || expression.operator.type === 'TO' ? value.value : expression.operator.type === 'PLUS_EQUAL' ? this.lookupVariable(expression.name, expression) + value.value diff --git a/app/javascript/interpreter/expression.ts b/app/javascript/interpreter/expression.ts index ac0ec930c6..514a2bb1bc 100644 --- a/app/javascript/interpreter/expression.ts +++ b/app/javascript/interpreter/expression.ts @@ -190,6 +190,7 @@ export class AssignExpression extends Expression { public name: Token, public operator: Token, public value: Expression, + public updating: boolean, public location: Location ) { super() diff --git a/app/javascript/interpreter/frames.ts b/app/javascript/interpreter/frames.ts index 7281ff4e96..258f954132 100644 --- a/app/javascript/interpreter/frames.ts +++ b/app/javascript/interpreter/frames.ts @@ -4,6 +4,7 @@ import { RuntimeError } from './error' export type FrameExecutionStatus = 'SUCCESS' | 'ERROR' import type { EvaluationResult } from './evaluation-result' import type { ExternalFunction } from './executor' +import { BinaryExpression, Expression } from './expression' export type FrameType = 'ERROR' | 'REPEAT' | 'EXPRESSION' @@ -81,7 +82,7 @@ function describeVariableStatement(frame: FrameWithResult) { } function describeAssignExpression(frame: FrameWithResult) { - let output = `

This updated the variable called ${frame.result.name} to be equal to ${frame.result.value.expression}, which in this case is ${frame.result.value.value}.

` + let output = `

This updated the variable called ${frame.result.name} to ${frame.result.value.value}.

` output = addExtraAssignInfo(frame, output) return output @@ -103,10 +104,11 @@ function describeForeachStatement(frame: FrameWithResult) { } function describeIfStatement(frame: FrameWithResult) { + // TODO!! return '' - let output = `

This checks to see whether ${frame.result.condition.left.obj.expression} is greater than ${frame.result.condition.right.name}.

` - output += `

In this case, ${frame.result.condition.left.obj.expression} is set to ${frame.result.condition.left.obj.value} and ${frame.result.condition.right.name} is set to ${frame.result.condition.right.value} so the result is ${frame.result.value}.

` - return output + // let output = `

This checks to see whether ${frame.result.condition.left.obj.expression} is greater than ${frame.result.condition.right.name}.

` + // output += `

In this case, ${frame.result.condition.left.obj.expression} is set to ${frame.result.condition.left.obj.value} and ${frame.result.condition.right.name} is set to ${frame.result.condition.right.value} so the result is ${frame.result.value}.

` + // return output } function describeReturnStatement(frame: FrameWithResult) { let output = `

This returned the value of ${frame.result.value.name}, which in this case is ${frame.result.value.value}.

` diff --git a/app/javascript/interpreter/languages/jikiscript/parser.ts b/app/javascript/interpreter/languages/jikiscript/parser.ts index e9d4b79d49..7692c57bd9 100644 --- a/app/javascript/interpreter/languages/jikiscript/parser.ts +++ b/app/javascript/interpreter/languages/jikiscript/parser.ts @@ -160,6 +160,7 @@ export class Parser implements GenericParser { private statement(): Statement { if (this.match('SET')) return this.setStatement() + if (this.match('CHANGE')) return this.changeStatement() if (this.match('IF')) return this.ifStatement() if (this.match('RETURN')) return this.returnStatement() if (this.match('REPEAT')) return this.repeatStatement() @@ -216,6 +217,47 @@ export class Parser implements GenericParser { ) } } + private changeStatement(): Statement { + const setToken = this.previous() + // if (this.peek(2).type == 'LEFT_BRACKET') { + // const assignment = this.assignment() + // this.consumeEndOfLine() + + // return new ExpressionStatement( + // assignment, + // Location.between(setToken, assignment) + // ) + // } else { + const name = this.consume('IDENTIFIER', 'MissingVariableName') + + const token = this.consume( + 'TO', + 'MissingToAfterVariableNameToInitializeValue', + { + name, + } + ) + + const initializer = this.expression() + this.consumeEndOfLine() + + // return new VariableStatement( + // name, + // initializer, + // Location.between(setToken, initializer) + // ) + return new ExpressionStatement( + new AssignExpression( + name, + token, + initializer, + true, + Location.between(setToken, initializer) + ), + Location.between(setToken, initializer) + ) + // } + } private ifStatement(): Statement { const ifToken = this.previous() @@ -248,7 +290,7 @@ export class Parser implements GenericParser { this.consume('DO', 'MissingDoToStartBlock', { type: 'if' }) const thenBranch = this.blockStatement('if', { allowElse: true }) - let elseBranch = null + let elseBranch: Statement | null = null if (this.match('ELSE')) { if (this.match('IF')) { @@ -415,6 +457,7 @@ export class Parser implements GenericParser { expr.name, operator, value, + true, Location.between(expr, value) ) } diff --git a/app/javascript/interpreter/languages/jikiscript/scanner.ts b/app/javascript/interpreter/languages/jikiscript/scanner.ts index af750efbf9..6a92ec4855 100644 --- a/app/javascript/interpreter/languages/jikiscript/scanner.ts +++ b/app/javascript/interpreter/languages/jikiscript/scanner.ts @@ -37,6 +37,7 @@ export class Scanner { private static readonly keywords: Record = { and: 'AND', + change: 'CHANGE', do: 'DO', else: 'ELSE', end: 'END', diff --git a/app/javascript/interpreter/languages/jikiscript/token.ts b/app/javascript/interpreter/languages/jikiscript/token.ts index 5b15f10953..66d50ae1c0 100644 --- a/app/javascript/interpreter/languages/jikiscript/token.ts +++ b/app/javascript/interpreter/languages/jikiscript/token.ts @@ -34,6 +34,7 @@ export type TokenType = // Keywords | 'AND' + | 'CHANGE' | 'DO' | 'ELSE' | 'END' diff --git a/app/javascript/interpreter/resolver.ts b/app/javascript/interpreter/resolver.ts index ee7ac80aad..bc8f380129 100644 --- a/app/javascript/interpreter/resolver.ts +++ b/app/javascript/interpreter/resolver.ts @@ -214,11 +214,13 @@ export class Resolver public visitUpdateExpression(expression: UpdateExpression): void { this.resolve(expression.operand) - if (expression.operand instanceof VariableExpression) + if (expression.operand instanceof VariableExpression) { this.resolveLocal(expression.operand, expression.operand.name) - else if (expression.operand instanceof GetExpression) + } else if (expression.operand instanceof GetExpression) { this.resolve(expression.operand.obj) - else this.error('InvalidPostfixOperand', expression.location) + } else if (expression.operand instanceof LiteralExpression) { + // Do nothing + } else this.error('InvalidPostfixOperand', expression.location) } public visitGetExpression(expression: GetExpression): void { diff --git a/test/javascript/interpreter/languages/jikiscript/interpreter.test.ts b/test/javascript/interpreter/languages/jikiscript/interpreter.test.ts index 06a86c16b2..a86d326195 100644 --- a/test/javascript/interpreter/languages/jikiscript/interpreter.test.ts +++ b/test/javascript/interpreter/languages/jikiscript/interpreter.test.ts @@ -390,7 +390,7 @@ describe('statements', () => { test('regular', () => { const { frames } = interpret(` set x to 2 - set x to 3 + change x to 3 `) expect(frames).toBeArrayOfSize(2) expect(frames[0].status).toBe('SUCCESS') @@ -409,6 +409,17 @@ describe('statements', () => { expect(frames[0].variables).toMatchObject({ x: 2 }) }) + test('errors if declared twice', () => { + const { error, frames } = interpret(` + set pos to 10 + set pos to 20 + `) + console.log(frames) + expect(frames).toBeArrayOfSize(2) + expect(frames[1].error!.category).toBe('RuntimeError') + expect(frames[1].error!.type).toBe('VariableAlreadyDeclared') + }) + test('declare and use', () => { const { frames } = interpret(` set x to 2 @@ -421,15 +432,68 @@ describe('statements', () => { expect(frames[1].variables).toMatchObject({ x: 2, y: 3 }) }) }) + + describe('change', () => { + test('changes variable correctly', () => { + const { error, frames } = interpret(` + set pos to 10 + change pos to 20 + `) + console.log(error) + expect(frames).toBeArrayOfSize(2) + expect(frames[0].variables).toMatchObject({ pos: 10 }) + expect(frames[1].variables).toMatchObject({ pos: 20 }) + }) + + test('errors if not declared', () => { + const { error, frames } = interpret(` + change pos to 20 + `) + console.log(error) + expect(frames).toBeArrayOfSize(1) + expect(frames[0].error!.category).toBe('RuntimeError') + expect(frames[0].error!.type).toBe('VariableNotDeclared') + }) + }) + describe('scope', () => { test('declared variable can be used in blocks', () => { const { error, frames } = interpret(` set pos to 10 repeat(5) do - set pos to pos + 10 + change pos to pos + 10 end `) expect(frames).toBeArrayOfSize(7) + expect(frames[6].variables).toMatchObject({ pos: 60 }) + }) + + test('declared variable is persisted after repeat', () => { + const { error, frames } = interpret(` + set pos to 10 + repeat(5) do + change pos to pos + 10 + end + change pos to pos + 10 + `) + expect(frames).toBeArrayOfSize(8) + expect(frames[7].variables).toMatchObject({ pos: 70 }) + }) + + test('declared variable is persisted after if', () => { + const { error, frames } = interpret(` + set pos to 10 + if pos is 10 do + change pos to pos + 10 + end + change pos to pos + 5 + `) + console.log(frames) + expect(frames).toBeArrayOfSize(4) + expect(frames[0].variables).toMatchObject({ pos: 10 }) + expect(frames[1].variables).toMatchObject({ pos: 10 }) + // expect(frames[2].variables).toMatchObject({ pos: 20 }) + expect(frames[3].variables).toMatchObject({ pos: 25 }) }) }) describe('function', () => { @@ -542,7 +606,7 @@ describe('statements', () => { const { error, frames } = interpret(` set x to 0 repeat 1 do - set x to x + 1 + change x to x + 1 end `) expect(frames).toBeArrayOfSize(3) @@ -558,7 +622,7 @@ describe('statements', () => { const { frames } = interpret(` set x to 0 repeat 3 do - set x to x + 1 + change x to x + 1 end `) expect(frames).toBeArrayOfSize(5) @@ -580,7 +644,7 @@ describe('statements', () => { const { frames } = interpret(` set x to 1 while (x > 0) do - set x to x - 1 + change x to x - 1 end `) expect(frames).toBeArrayOfSize(4) @@ -598,7 +662,7 @@ describe('statements', () => { const { frames } = interpret(` set x to 3 while x > 0 do - set x to x - 1 + change x to x - 1 end `) expect(frames).toBeArrayOfSize(8) @@ -958,7 +1022,7 @@ describe('evaluateFunction', () => { const code = ` set x to 1 function move do - set x to x + 1 + change x to x + 1 return x end` const interpreter = new Interpreter(code, { language: 'JikiScript' }) From 82077b1a6f4119f68435669e67c948c6e7d4a236 Mon Sep 17 00:00:00 2001 From: Aron Demeter <66035744+dem4ron@users.noreply.github.com> Date: Wed, 8 Jan 2025 11:01:17 +0100 Subject: [PATCH 27/38] Preview all scenarios, unify LHS styling (#7249) * Small tweaks * Fix wrong DOM * Add missing types * Show correct layout in previous test view (#7245) * Edit rps config (#7246) * Add missing error_html * Edit rock-paper-scissors config * Add proper IO preview, create flat map of tests (#7248) * Add missing error_html * Add better IO view * Add Flat test collection * Fix css * Add descriptionHtml for state preview * Apply suggestions from code review --- app/css/bootcamp/components/test-buttons.css | 8 +++ .../ControlButtons/CheckScenariosButton.tsx | 3 +- .../ControlButtons/ControlButtons.tsx | 36 +++++++++-- .../PreviousTestResultsButtons.tsx | 2 +- .../PreviousTestResultsView.tsx | 63 +++++-------------- .../SolveExercisePage/SolveExercisePage.tsx | 2 +- .../TaskPreview/IOPreview.tsx | 41 +++++++----- .../TaskPreview/StatePreview.tsx | 18 +++--- .../TaskPreview/TaskPreview.tsx | 21 ++++--- .../SolveExercisePage/Tasks/useTasks.tsx | 2 - .../InspectedTestResultView.tsx | 33 ++++------ .../{FailInfo.tsx => TestResultInfo.tsx} | 18 +++--- .../TestResultsView/TestResultsButtons.tsx | 2 +- .../SolveExercisePage/hooks/useSetupStores.ts | 32 ++++++++-- .../SolveExercisePage/store/testStore.ts | 23 +++++++ .../components/bootcamp/types/Tasks.d.ts | 1 + .../components/bootcamp/types/TestResult.d.ts | 1 + .../drawing/exercises/loops/config.json | 3 +- .../maze/exercises/manual-solve/config.json | 3 +- .../exercises/basic/config.json | 12 +--- 20 files changed, 184 insertions(+), 140 deletions(-) rename app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/{FailInfo.tsx => TestResultInfo.tsx} (54%) diff --git a/app/css/bootcamp/components/test-buttons.css b/app/css/bootcamp/components/test-buttons.css index c65af9c40c..2ce1916116 100644 --- a/app/css/bootcamp/components/test-buttons.css +++ b/app/css/bootcamp/components/test-buttons.css @@ -1,4 +1,11 @@ #bootcamp-solve-exercise-page { + .test-selector-buttons { + @apply flex gap-x-4; + + .test-button { + @apply flex-shrink-0; + } + } .test-button { @apply relative p-4 w-[40px] h-[40px] grid place-content-center; transition: background-color 0.3s ease-out; @@ -56,6 +63,7 @@ @apply absolute bottom-[-10px] left-[50%]; transform: translateX(-50%); + z-index: 100; width: 0; height: 0; diff --git a/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx index 6f8dfc6a5d..9089783264 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/ControlButtons/CheckScenariosButton.tsx @@ -8,8 +8,7 @@ export function CheckScenariosButton({ }: { handleRunCode: () => void }) { - const { toggleShouldAutoRunCode, shouldAutoRunCode, setShouldAutoRunCode } = - useEditorStore() + const { shouldAutoRunCode, setShouldAutoRunCode } = useEditorStore() return ( +
+ {flatPreviewTaskTests.map((taskTest, testIdx) => ( + + ))}
) } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsButtons.tsx b/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsButtons.tsx index b1fc7c4549..55aad87d8c 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsButtons.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/PreviousTestResultsView/PreviousTestResultsButtons.tsx @@ -14,7 +14,7 @@ export function PreviousTestResultsButtons() { if (!previousTestSuiteResult || testSuiteResult) return null return ( -
+
{previousTestSuiteResult.tests.map((test, idx) => { return (
diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx index 06fb9b63b7..cf1075c7bb 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/IOPreview.tsx @@ -1,20 +1,33 @@ import React from 'react' -export function IOPreview({ firstTest }: { firstTest: TaskTest }) { +import { CodeRun } from '../TestResultsView/CodeRun' +import { generateCodeRunString } from '../hooks/useSetupStores' +export function IOPreview({ + inspectedPreviewTaskTest, +}: { + inspectedPreviewTaskTest: TaskTest +}) { return (
-

- The first{' '} - scenario is{' '} - {firstTest.name}. -

-

- We'll run{' '} - - {firstTest.function}({firstTest.params.join(', ')}) - {' '} - and expect it to return{' '} - {firstTest.expected} -

+
+

+ Scenario: + {inspectedPreviewTaskTest.name} +

+ + + + + + + + +
Expected:{inspectedPreviewTaskTest.expected}
+
) } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx index dd29e9bca2..c15e4dc25d 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/StatePreview.tsx @@ -1,22 +1,22 @@ import React from 'react' export function StatePreview({ - firstTest, + inspectedPreviewTaskTest, }: { - firstTest: TaskTest - config: Config + inspectedPreviewTaskTest: TaskTest }) { return (

Scenario: - {firstTest.name} + {inspectedPreviewTaskTest.name}

-

- The first scenario is {firstTest.name}. The first scenario is{' '} - {firstTest.name}. The first scenario is {firstTest.name}. The first - scenario is {firstTest.name}. -

+
) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx index b0077ee72e..3b9bead7a3 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TaskPreview/TaskPreview.tsx @@ -1,28 +1,31 @@ -import React from 'react' -import { useMemo } from 'react' +import React, { useContext } from 'react' import { wrapWithErrorBoundary } from '@/components/bootcamp/common/ErrorBoundary/wrapWithErrorBoundary' import useTestStore from '../store/testStore' import { StatePreview } from './StatePreview' import { IOPreview } from './IOPreview' import { useMountViewOrImage } from './useMountViewOrImage' +import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' -export function _TaskPreview({ exercise }: { exercise: Exercise }) { - const firstTest = useMemo(() => exercise.tasks[0].tests[0], [exercise.tasks]) - const { testSuiteResult, previousTestSuiteResult } = useTestStore() +export function _TaskPreview() { + const { exercise } = useContext(SolveExercisePageContext) + const { testSuiteResult, previousTestSuiteResult, inspectedPreviewTaskTest } = + useTestStore() const viewContainerRef = useMountViewOrImage({ config: exercise.config, - taskTest: firstTest, + taskTest: inspectedPreviewTaskTest, }) - if (testSuiteResult || previousTestSuiteResult) return null + if (testSuiteResult || previousTestSuiteResult) { + return null + } return (
{exercise.config.testsType === 'io' ? ( - + ) : ( - + )}
diff --git a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/useTasks.tsx b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/useTasks.tsx index bc609925bc..1438b05cfc 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/Tasks/useTasks.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/Tasks/useTasks.tsx @@ -1,9 +1,7 @@ -import React from 'react' import { useState, useContext, useCallback, useRef, useEffect } from 'react' import { SolveExercisePageContext } from '../SolveExercisePageContextWrapper' import { type NextExercise, completeSolution } from './completeSolution' import type { TaskStore } from '../store/taskStore/taskStore' -import { useLogger } from '@/components/common/hooks/useLogger' export function useTasks({ areAllTasksCompleted, diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx index 460db6217d..b9712831f7 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/InspectedTestResultView.tsx @@ -6,11 +6,11 @@ import { useInspectedTestResultView, type ProcessedExpect, } from './useInspectedTestResultView' -import { FailInfo } from './FailInfo' +import { TestResultInfo } from './TestResultInfo' import { PassMessage } from './PassMessage' function _InspectedTestResultView() { - const { result, viewContainerRef, firstFailingExpect } = + const { result, viewContainerRef, firstFailingExpect, processedExpects } = useInspectedTestResultView() if (!result) return null @@ -23,7 +23,8 @@ function _InspectedTestResultView() { )} > @@ -36,12 +37,12 @@ export const InspectedTestResultView = wrapWithErrorBoundary( _InspectedTestResultView ) -function InspectedTestResultViewLHS({ +export function InspectedTestResultViewLHS({ result, - firstFailingExpect, + firstExpect, }: { result: NewTestResult - firstFailingExpect: ProcessedExpect | null + firstExpect: ProcessedExpect | null }) { return (
@@ -51,23 +52,11 @@ function InspectedTestResultViewLHS({ {result.name} - {/*
-

- Scenario: {result.name} - {result.status} -

*/} - - {result.status === 'fail' ? ( - - ) : ( - - )} + + {result.status === 'pass' && }
- + + {result.frames && }
) } diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultInfo.tsx similarity index 54% rename from app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx rename to app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultInfo.tsx index 21fa550032..baf0db3d5c 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/FailInfo.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultInfo.tsx @@ -4,24 +4,26 @@ import { IOTestResultView } from './IOTestResultView' import { StateTestResultView } from './StateTestResultView' import type { ProcessedExpect } from './useInspectedTestResultView' -export function FailInfo({ +export function TestResultInfo({ result, - firstFailingExpect, + firstExpect, }: { result: NewTestResult - firstFailingExpect: ProcessedExpect | null + firstExpect: ProcessedExpect | null }) { - if (!firstFailingExpect) { + if (!firstExpect) { return null } - if (firstFailingExpect.testsType === 'state') { - return + if (firstExpect.testsType === 'state') { + return } else { return ( <> - - + + + +
) diff --git a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx index bf508ed961..b73c6843dc 100644 --- a/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx +++ b/app/javascript/components/bootcamp/SolveExercisePage/TestResultsView/TestResultsButtons.tsx @@ -16,7 +16,7 @@ export function TestResultsButtons() { if (!testSuiteResult) return null return ( -
+
{testSuiteResult.tests.map((test, idx) => { return (
Go to the Bootcamp ✨ diff --git a/app/javascript/components/modals/welcome-modal/JuniorView.tsx b/app/javascript/components/modals/welcome-modal/JuniorView.tsx index 416c158ea5..49400882b6 100644 --- a/app/javascript/components/modals/welcome-modal/JuniorView.tsx +++ b/app/javascript/components/modals/welcome-modal/JuniorView.tsx @@ -34,7 +34,7 @@ export function JuniorView() {
Go to the Bootcamp ✨ diff --git a/app/javascript/components/settings/BootcampAffiliateCouponForm.tsx b/app/javascript/components/settings/BootcampAffiliateCouponForm.tsx index 41b9b54da6..257fff5538 100644 --- a/app/javascript/components/settings/BootcampAffiliateCouponForm.tsx +++ b/app/javascript/components/settings/BootcampAffiliateCouponForm.tsx @@ -90,7 +90,7 @@ export function InfoMessage({

To thank you for being an Insider and to help increase the amount of people signing up to Exercism's{' '} - + Learn to Code Bootcamp , we are giving all Insiders an{' '} @@ -123,7 +123,7 @@ export function InfoMessage({ return (

Exercism Insiders can access 20% off Exercism's{' '} - + Learn to Code Bootcamp , and receive 20% of all sales when someone uses their voucher code. diff --git a/app/javascript/components/settings/BootcampFreeCouponForm.tsx b/app/javascript/components/settings/BootcampFreeCouponForm.tsx index 353252650f..696f15d471 100644 --- a/app/javascript/components/settings/BootcampFreeCouponForm.tsx +++ b/app/javascript/components/settings/BootcampFreeCouponForm.tsx @@ -42,7 +42,7 @@ export default function BootcampFreeCouponForm({

Free Seat on the Bootcamp

As a lifetime insider you're eligible for a free seat on Exercism's{' '} - + Learn to Code Bootcamp . diff --git a/app/views/bootcamp/confirmed.html.haml b/app/views/bootcamp/confirmed.html.haml index 5ee2b0e714..2abd4b072d 100644 --- a/app/views/bootcamp/confirmed.html.haml +++ b/app/views/bootcamp/confirmed.html.haml @@ -15,7 +15,27 @@ %p.info We're so excited to have you on board! 💙 - %p.info - You should shortly receive an email welcoming you to the Bootcamp, and asking you to say hello. Please do take a few minutes to tell us your story - it's both incredibly motivating for us to hear about who's taking the Bootcamp, and also means we can better tailor what we're making! - %p.info - Thanks for trusting us with your learning 🙂 + - if current_user + %p.info + Your Exercism account has been granted Bootcamp access. + Please use the following button to get started. + %p.info + You should shortly receive an email welcoming you to the Bootcamp, and asking you to say hello. Please do take a few minutes to tell us your story - it's both incredibly motivating for us to hear about who's taking the Bootcamp, and also means we can better tailor what we're making! + %p.info.mb-10 + If you have any questions, please email us at + %strong.font-medium bootcamp@exercism.org + and we'll be happy to help. + = link_to "Go to the Bootcamp", bootcamp_dashboard_path, class: 'button' + - else + %p.info + %strong As you're not logged into your Exercism account, we need to manually connect things for you. + Firstly, please make sure you have an Exercism account. If you don't, #{link_to 'create one here', 'https://exercism.org/users/sign_up', class: 'text-primary-blue font-semibold'}. + %p.info + If the email address on that account is #{@bootcamp_data.email}, you should now have access. + If it's not, please email us at + %strong.font-medium bootcamp@exercism.org + with your Exercism username/handle and the email address you've enrolled with (#{@bootcamp_data.email}) and we'll give you access manually. + %p.info + You should also shortly receive an email welcoming you to the Bootcamp, and asking you to say hello. Please do take a few minutes to tell us your story - it's both incredibly motivating for us to hear about who's taking the Bootcamp, and also means we can better tailor what we're making! + %p.info + Thanks for trusting us with your learning 🙂 diff --git a/app/views/bootcamp/dashboard/index.html.haml b/app/views/bootcamp/dashboard/index.html.haml index 5e13eb5612..88632d000a 100644 --- a/app/views/bootcamp/dashboard/index.html.haml +++ b/app/views/bootcamp/dashboard/index.html.haml @@ -1,15 +1,60 @@ -#page-bootcamp-dashboard.pt-20 - .lg-container - .grid.grid-cols-2 - .lhs - - if @exercise - - if @solution - %h2 Continue Where You Left Off - %p You have an exercise in progress. - = render "exercise", exercise: @exercise, solution: @solution +#page-bootcamp-dashboard + - if Bootcamp::Settings.level_idx.zero? + .lg-container + %div{ class: 'max-w-[720px] mx-auto' } + %h1 Welcome to the Exercism Bootcamp! + %p.large Thanks so much for joining the Bootcamp. We're really excited to share our passion for programming with you! + %h2 Introductory Session + %p + Our kick-off session is at 18:00 UTC on Saturday Jan 11th. + We'll introduce you to the Bootcamp, explain how it works, and answer any questions you have. + Then we'll dig into the first steps on your coding journey. + %p + %strong.font-semibold Check back here + to get a link shortly before the session starts. + + %h2 Forum & Discord + %p + We will be using Exercism's Forum and Discord server throughout this course to get unstuck and hang out. + Both have dedicated bootcamp areas which + %strong.font-medium you can access now. + %ul + %li + %strong.font-semibold The forum (#{link_to 'exercism.org/r/forum', 'https://exercism.org/r/forum', class: 'text-linkColor'}) + is the space to get help or ask questions. There is a dedicated Bootcamp category. Log in with your Exercism account and read + = link_to 'this post', 'https://forum.exercism.org/t/welcome-to-the-bootcamp-forum-space/14389', class: 'text-linkColor font-semibold' + to get started. + %li + %strong.font-semibold Our Discord Server (#{link_to 'exercism.org/r/discord', 'https://exercism.org/r/discord', class: 'text-linkColor'}) + is the place to go to chat and hang out with other participants. There is a dedicated #bootcamp channel reserved for you. + %strong.font-semibold Please use threads + on Discord to keep things ordered (don't be offended if you forget and we move your messages!). + To get access to the Bootcamp Channels, make sure your Exercism and Discord accounts #{link_to 'are connected here', 'https://exercism.org/settings/integrations', class: 'text-linkColor font-semibold'}. + + + %h2 Weekly Rhythm + %p We've designed each week to follow a similar pattern. + %ul + %li Monday at 18:00 UTC: Introduction to the week's content (Live Session). + %li Tuesday to Friday: Work on the week's exercises. + %li Saturday at 18:00 UTC: Deep dive into the week's exercises (Live Session). + %p The live sessions will be streamed on our YouTube channel and will be available to watch later if you can't make it. + + %h2 Am I signed up correctly? + %p.pb-20 Yes. If you're seeing this page, then you're signed up and will be able to access the content after the 11th. + + - else + .lg-container + .grid.grid-cols-2 + .lhs + - if @exercise + - if @solution + %h2 Continue Where You Left Off + %p You have an exercise in progress. + = render 'exercise', exercise: @exercise, solution: @solution + - else + %h2 Start new exercise + %p You have a new exercise available to work on. + = render 'exercise', exercise: @exercise - else - %h2 Start new exercise - %p You have a new exercise available to work on. - = render "exercise", exercise: @exercise - - else - You have no exercises available. + You have no exercises available. diff --git a/app/views/layouts/bootcamp-ui.haml b/app/views/layouts/bootcamp-ui.haml index 82918413e5..9244069621 100644 --- a/app/views/layouts/bootcamp-ui.haml +++ b/app/views/layouts/bootcamp-ui.haml @@ -61,10 +61,12 @@ %body{ class: body_class } %header.c-site-header - .lg-container + .sm-container .container %img{ src: "https://assets.exercism.org/assets/bootcamp/exercism-face-light-2fc4ffad44f295d2e900ab2d2198d2280128dfcd.svg" } .content %strong.font-semibold Exercism Bootcamp + + = link_to "Back to Exercism →", "https://exercism.org", class: 'ml-auto text-linkColor font-semibold text-16' = yield diff --git a/app/views/layouts/bootcamp.haml b/app/views/layouts/bootcamp.haml index efa4fe8e0e..c202594fe4 100644 --- a/app/views/layouts/bootcamp.haml +++ b/app/views/layouts/bootcamp.haml @@ -46,14 +46,6 @@ = javascript_include_tag('bootcamp', type: :module, crossorigin: :anonymous, 'data-turbo-track': 'reload', 'data-turbo-eval': false, defer: true) %script{ defer: true, "data-domain": "bootcamp.exercism.org", src: "https://plausible.io/js/script.outbound-links.revenue.tagged-events.js" } - %script{ async: true, "data-turbo-track": "reload", src: "https://www.googletagmanager.com/gtag/js?id=AW-303924066" } - :javascript - window.dataLayer = window.dataLayer || [] - function gtag() { - dataLayer.push(arguments) - } - gtag('js', new Date()) - gtag('config', 'AW-303924066') %title= content_for(:title) || "Bootcamp" %meta{ content: "width=device-width,initial-scale=1", name: "viewport" }/ @@ -68,8 +60,6 @@ - url = "https://bootcamp.exercism.org" - og_image_url = image_url('bootcamp/og.jpg') - %link{ rel: "canonical", href: "https://bootcamp.exercism.org" } - %title= title %meta{ name: "description", content: description } %meta{ name: "viewport", content: "width=device-width, initial-scale=1, viewport-fit=cover" } diff --git a/db/migrate/20241119025227_create_bootcamp_user_projects.rb b/db/migrate/20241119025227_create_bootcamp_user_projects.rb index 04accdb5b8..ba89d3ceea 100644 --- a/db/migrate/20241119025227_create_bootcamp_user_projects.rb +++ b/db/migrate/20241119025227_create_bootcamp_user_projects.rb @@ -10,6 +10,9 @@ def change t.timestamps t.index [:user_id, :project_id], unique: true + + t.foreign_key :users, column + t.foreign_key :bootcamp_projects, column: :project_id end end end diff --git a/db/migrate/20250108193404_add_code_to_bootcamp_data.rb b/db/migrate/20250108193404_add_code_to_bootcamp_data.rb new file mode 100644 index 0000000000..2cfb1cf279 --- /dev/null +++ b/db/migrate/20250108193404_add_code_to_bootcamp_data.rb @@ -0,0 +1,7 @@ +class AddCodeToBootcampData < ActiveRecord::Migration[7.0] + def change + return if Rails.env.production? + + add_column :user_bootcamp_data, :access_code, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index c275854539..bf95f788df 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2025_01_08_145756) do +ActiveRecord::Schema[7.0].define(version: 2025_01_08_193404) do create_table "active_storage_attachments", charset: "utf8mb4", collation: "utf8mb4_unicode_ci", force: :cascade do |t| t.string "name", null: false t.string "record_type", null: false @@ -1425,7 +1425,8 @@ t.string "ppp_country" t.string "checkout_session_id" t.text "utm" - t.integer :level_idx, null: false, default: 0 + t.integer "level_idx", null: false, default: 0 + t.string "access_code" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.index ["user_id"], name: "index_user_bootcamp_data_on_user_id", unique: true diff --git a/docker/nginx.conf b/docker/nginx.conf index 5282ee7747..d511ae839a 100644 --- a/docker/nginx.conf +++ b/docker/nginx.conf @@ -146,4 +146,9 @@ http { server_name www.exercism.org .exercism.io .exercism.net .exercism.com .exercism.lol; return 301 https://exercism.org$request_uri; } + + server { + server_name bootcamp.exercism.org + return 301 https://exercism.org$request_uri; + } } diff --git a/test/commands/user/bootstrap_test.rb b/test/commands/user/bootstrap_test.rb index 4cc4bfe84d..67cf0f48c7 100644 --- a/test/commands/user/bootstrap_test.rb +++ b/test/commands/user/bootstrap_test.rb @@ -38,7 +38,7 @@ class User::BootstrapTest < ActiveSupport::TestCase User::Bootstrap.(user) end - test "becomes attendee and subscribes to onboarding emails if paid" do + test "becomes attendee and subscribes to onboarding emails if paid email" do email = "#{SecureRandom.uuid}@test.com" ubd = create :user_bootcamp_data, email:, paid_at: Time.current user = create(:user, email:) @@ -51,7 +51,7 @@ class User::BootstrapTest < ActiveSupport::TestCase assert_equal user.id, ubd.reload.user_id end - test "does not becomes attendee if not paid" do + test "does not becomes attendee if not paid email" do email = "#{SecureRandom.uuid}@test.com" ubd = create(:user_bootcamp_data, email:) user = create(:user, email:) @@ -62,4 +62,27 @@ class User::BootstrapTest < ActiveSupport::TestCase refute user.reload.bootcamp_attendee? assert_equal user.id, ubd.reload.user_id end + + test "becomes attendee and subscribes to onboarding emails if paid access code" do + ubd = create :user_bootcamp_data, paid_at: Time.current, access_code: SecureRandom.hex(8) + user = create :user + + # Always does this once by default anyway + User::Bootcamp::SubscribeToOnboardingEmails.expects(:defer).with(ubd).twice + + User::Bootstrap.(user, bootcamp_access_code: ubd.access_code) + assert user.reload.bootcamp_attendee? + assert_equal user.id, ubd.reload.user_id + end + + test "does not becomes attendee if not paid access code" do + ubd = create :user_bootcamp_data, access_code: SecureRandom.hex(8) + user = create :user + + User::Bootcamp::SubscribeToOnboardingEmails.expects(:defer).with(ubd).twice + + User::Bootstrap.(user, bootcamp_access_code: ubd.access_code) + refute user.reload.bootcamp_attendee? + assert_equal user.id, ubd.reload.user_id + end end From a1745128734faa7f994314a3985c2404be89a9d8 Mon Sep 17 00:00:00 2001 From: Jeremy Walker Date: Wed, 8 Jan 2025 22:37:43 +0000 Subject: [PATCH 38/38] Update db/migrate/20241119025227_create_bootcamp_user_projects.rb --- db/migrate/20241119025227_create_bootcamp_user_projects.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20241119025227_create_bootcamp_user_projects.rb b/db/migrate/20241119025227_create_bootcamp_user_projects.rb index ba89d3ceea..b1f7d66732 100644 --- a/db/migrate/20241119025227_create_bootcamp_user_projects.rb +++ b/db/migrate/20241119025227_create_bootcamp_user_projects.rb @@ -11,7 +11,7 @@ def change t.index [:user_id, :project_id], unique: true - t.foreign_key :users, column + t.foreign_key :users t.foreign_key :bootcamp_projects, column: :project_id end end