diff --git a/.env b/.env new file mode 100644 index 00000000..550387e6 --- /dev/null +++ b/.env @@ -0,0 +1,12 @@ +# Specify if deploying under a nested public path +# https://vitejs.dev/guide/build.html#public-base-path +VITE_BASE_URL='/' +# Configure names used in the content +VITE_SHORT_NAME='ATLAS' +VITE_MITRE_TITLE='MITRE ATLAS™' +VITE_CONTACT_EMAIL='atlas@mitre.org' +# URL of the deployed Navigator instance +# See https://github.com/mitre-attack/attack-navigator for source info +VITE_NAVIGATOR_URL='https://mitre-atlas.github.io/atlas-navigator' +# Used to construct URL to Navigator layer JSON files for case studies +VITE_NAVIGATOR_LAYER_GITHUB_URL='https://raw.githubusercontent.com/mitre-atlas/atlas-navigator-data/main' diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 00000000..6f40582d --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,15 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution') + +module.exports = { + root: true, + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier/skip-formatting' + ], + parserOptions: { + ecmaVersion: 'latest' + } +} diff --git a/.github/workflows/deploy-github.yml b/.github/workflows/deploy-github.yml new file mode 100644 index 00000000..8e7f54dd --- /dev/null +++ b/.github/workflows/deploy-github.yml @@ -0,0 +1,56 @@ +name: GitHub Pages + +on: + push: + branches: + - main + pull_request: + +jobs: + deploy: + runs-on: ubuntu-22.04 + permissions: + contents: write + concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "20" + + - name: Cache dependencies + uses: actions/cache@v4 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Configure environment variables + shell: bash + env: + GOOGLE_ANALYTICS_ID: ${{ secrets.GOOGLE_ANALYTICS_ID }} + VITE_OSANO_SCRIPT: ${{ secrets.VITE_OSANO_SCRIPT }} + run: echo -e "VITE_ANALYTICS_ID=$GOOGLE_ANALYTICS_ID\nVITE_OSANO_SCRIPT=$VITE_OSANO_SCRIPT" > .env.production + + - name: Install dependencies + run: npm install + + - name: Build for production + run: | + export NODE_OPTIONS="--max_old_space_size=4096" + npm run build + # Fix for 404 on refresh issue + cp dist/index.html dist/404.html + + - name: deploy + uses: peaceiris/actions-gh-pages@v3 + if: ${{ github.ref == 'refs/heads/main' }} + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./dist diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..38adffa6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..03ea7df8 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,37 @@ +image: node:latest + +variables: + GIT_SUBMODULE_STRATEGY: normal + +pages: + stage: deploy + cache: + key: + files: + - package-lock.json + prefix: npm + paths: + - node_modules/ + script: + # Configure to set Navigator URL, etc. + - echo "VITE_BASE_URL=$CI_PROJECT_NAME" >> .env + - cat .env + - npm run build + # navigate into the build output directory + - cd dist + # fix for 404 on refresh issue + - cp index.html 404.html + - cd .. + - cp -a dist/. public/ + artifacts: + paths: + - public + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + tags: + - pages + +default: + before_script: + # Install and cache dependencies + - npm install --cache .npm --prefer-offline diff --git a/.gitlab/merge_request_templates/Default.md b/.gitlab/merge_request_templates/Default.md new file mode 100644 index 00000000..fdea2ac2 --- /dev/null +++ b/.gitlab/merge_request_templates/Default.md @@ -0,0 +1,42 @@ +# Description + +Jira Ticket: + +Add Navigator page + +## Important Changes + +`test.vue` + +* List changes here + + +Notes: + +* List notes here + +## Testing Recommendations + +* [ ] List testing steps here + + +# Checklists + +**Submitter:** + +* [ ] This MR is into the correct branch. +* [ ] Comment added to the relevant Jira ticket(s) with a link to this MR. +* [ ] The relevant Jira ticket has been moved to 'In Review'. +* [ ] Post on Slack that the MR is open for review, tagging the reviewer. +* [ ] Code diff has been reviewed (it **does not** contain: additional white space, not applicable code changes, debug statements, etc.). + +**Reviewer:** + +* [ ] Code is maintainable and reusable, reuses existing code and infrastructure where appropriate, and accomplishes the task’s purpose. +* [ ] You have tried to break the code. +* [ ] Tested all recommendations listed in the "Testing Recommendations" section. The application behaves as expected with this MR. + +**Final Merger** + +* [ ] At least one review/approval have been received on this MR and all checklists have been completed. +* [ ] The relevant Jira ticket has been moved to 'Done.' diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..ec660887 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "public/atlas-data"] + path = public/atlas-data + url = ../atlas-data.git + branch = main diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..66e23359 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": false, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..8ac0f5f7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,155 @@ +# ATLAS Website Changelog + +## [4.0.0]() (2024-03-11) + +Website redesign + +#### Website +- Migrated from Nuxt.js 2 to Vue 3 +- Design updates + +#### Data +- Updated ATLAS data to [version 4.5.2](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#452-2024-03-11) + +## [3.6.1]() (2024-01-12) + +#### Website +- Minor mitigations updates +- Updated events and LinkedIn info + +#### Data +- Updated ATLAS data to [version 4.5.1](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#451-2024-01-12) + +## [3.6.0]() (2023-10-25) + +#### Website +- New LLM content and updated mitigations + +#### Data +- Updated ATLAS data to [version 4.5.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#450-2023-10-25) + +## [3.5.0]() (2023-04-12) + +#### Website +- Initial mitigations + +#### Data +- Updated ATLAS data to [version 4.4.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#440-2023-04-12) + +## [3.4.0]() (2023-03-01) + +#### Website +- Minor fixes + +#### Data +- Updated ATLAS data to [version 4.3.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#430-2023-02-28) + +## [3.3.0]() (2023-01-19) + +#### Website +- ATLAS tactics and techniques that are adapted from ATT&CK are denoted with a red & +- Updated events list +- Various fixes + +#### Data +- Updated ATLAS data to [version 4.2.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#420-2023-01-18) + +## [3.2.0]() (2022-10-28) + +#### Website +- Supports new case study fields: case study type, reporter, target, and actor +- Added FAQ page in "Resources" navigation menu +- Added "Key Info" button on individual case study pages +- Various fixes and updates + +#### Data +- Updated ATLAS data to [version 4.1.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#410-2022-10-27) + +## [3.1.0]() (2022-07-12) + +#### Website +- Supports display of custom data object types and string properties +- Supports display of multiple matrices +- Updated site navigation features with better support for small screens +- Various fixes and updates + +#### Data +- Updated ATLAS data to [version 4.0.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#400-2022-05-27) + +## [3.0.0]() (2022-03-31) + +#### Website +- Added case study builder feature +- Added ability to download case studies as Powerpoint files and raw YAML +- Added events list and more ways to get involved on the contact page +- Various fixes and language updates + +#### Data +- Updates ATLAS data to [version 3.0.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#300-2022-03-23) +- Moved ATLAS data files to their own repositories + +## [2.3.2]() (2022-01-04) + +#### Data +- Added individual case study YAML files for case study builder use + +## [2.3.1]() (2021-11-23) + +#### Data +- Fixed Navigator layer files for the 2 new case studies + +## [2.3.0]() (2021-10-29) + +#### Website +- Added case study examples to technique pages + +#### Data +- Updated ATLAS data to [version 2.2.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#220-2021-10-29) + +## [2.2.2]() (2021-07-28) + +#### Data +- Updated ATLAS Navigator layer files for parent technique expansion and relevant tactic highlights + +## [2.2.1]() (2021-07-14) + +#### Website +- Added buttons on each case study page to view its layer on the ATLAS Navigator + +## [2.2.0]() (2021-07-12) + +#### Website +- Removed colloquium announcement +- Various fixes + +#### Data +- Added ATLAS Navigator layer files to highlight techniques used in each case study + +## [2.1.3]() (2021-06-22) + +#### Website +- Added contact email +- Fixed sources format + +## [2.1.2]() (2021-06-21) + +#### Website +- Added analytics +- Various fixes + +## [2.1.1]() (2021-06-18) + +#### Website +- Added ATLAS Navigator page and CNAME +- Language updates + +## [2.1.0]() (2021-06-16) + +#### Website +- Added new footer, logos, colloquium announcement +- Updated to privacy policy, terms of use, and license +- Various fixes + +## [2.0.0]() (2021-05-13) + +Initial GitHub release with ATLAS data [version 2.0.0](https://github.com/mitre-atlas/atlas-data/blob/main/CHANGELOG.md#200-2021-05-13) diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..015f1dc0 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,14 @@ +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +This project makes use of ATT&CK®. +ATT&CK® Terms of Use - https://attack.mitre.org/resources/terms-of-use/ diff --git a/README.md b/README.md new file mode 100644 index 00000000..7a9fc35d --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# ATLAS Website + +ATLAS enables researchers to navigate the landscape of threats to artificial intelligence systems. Visit https://atlas.mitre.org for more information. + +This repository contains the ATLAS website source code, which is built upon Vue 3 and served via GitHub Pages at https://atlas.mitre.org. + +## Initial Git Setup + +This project uses the `atlas-data` project in this group as a Git submodule in `public/atlas-data`. + +Clone the repository using `git clone --recurse-submodules`, or if the repository is already cloned, run `git submodule init` then `git submodule update`. + +Once the submodule is available, run the following **once** to sparse checkout only the necessary files in the `dist` directory. + +```bash +git -C static/atlas-data/ config core.sparseCheckout true +echo 'dist/*' >> .git/modules/static/atlas-data/info/sparse-checkout +git submodule update --force --checkout static/atlas-data/ +``` + +## Updating ATLAS Data + +To update `atlas-data`, run `git submodule update --remote` to get the latest from its main branch, then commit the result. + +## Development Setup + +Ensure node and npm are available - currently using node v20. + +```bash +# Install dependencies +$ npm install + +# Serve with hot reload +$ npm run dev + +# Build for production and launch preview server +$ npm run build +$ npm run preview +``` + +## Notice + +Copyright 2021-2024 The MITRE Corporation. +Approved for Public Release; Distribution Unlimited. Case Number 21-2363. diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 00000000..f36a113e --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..cb35424d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13398 @@ +{ + "name": "atlas", + "version": "4.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "atlas", + "version": "4.0.0", + "dependencies": { + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "@mdi/font": "7.4.47", + "@mdit-vue/plugin-frontmatter": "^2.0.0", + "@mdit-vue/plugin-toc": "^2.0.0", + "@unhead/vue": "^1.8.13", + "esbuild": "^0.20.1", + "js-yaml": "^4.1.0", + "jsonschema": "^1.4.1", + "markdown-it": "^14.0.0", + "markdown-it-anchor": "^8.6.7", + "pinia": "^2.1.7", + "pluralize": "^8.0.0", + "pptxgenjs": "3.7.1", + "roboto-fontface": "*", + "vite-plugin-vuetify": "^2.0.3", + "vue": "^3.4.21", + "vue-draggable-plus": "^0.3.5", + "vue-gtag": "^2.0.1", + "vue-router": "^4.3.0", + "vuetify": "^3.5.8", + "webfontloader": "^1.6.28" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.7.2", + "@tsconfig/node18": "^18.2.2", + "@types/node": "^20.11.25", + "@types/webfontloader": "^1.6.38", + "@vitejs/plugin-vue": "^5.0.4", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "@vue/eslint-config-prettier": "^9.0.0", + "@vue/eslint-config-typescript": "^13.0.0", + "@vue/tsconfig": "^0.5.1", + "eslint": "^8.57.0", + "eslint-plugin-vue": "^9.22.0", + "npm-run-all2": "^6.1.2", + "prettier": "^3.2.5", + "raw-loader": "^4.0.2", + "sass": "^1.71.1", + "typescript": "~5.4.2", + "vite": "^5.1.6", + "vite-plugin-node-polyfills": "^0.21.0", + "vue-cli-plugin-vuetify": "~2.5.8", + "vue-tsc": "^2.0.6", + "webpack-plugin-vuetify": "^3.0.3" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz", + "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", + "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild-plugins/node-globals-polyfill": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", + "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild-plugins/node-modules-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", + "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + }, + "peerDependencies": { + "esbuild": "*" + } + }, + "node_modules/@esbuild-plugins/node-modules-polyfill/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "devOptional": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "devOptional": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "devOptional": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "devOptional": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "devOptional": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mdi/font": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz", + "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==" + }, + "node_modules/@mdit-vue/plugin-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-2.0.0.tgz", + "integrity": "sha512-/LrT6E60QI4XV4mqx3J87hqYXlR7ZyMvndmftR2RGz7cRAwa/xL+kyFLlgrMxkBIKitOShKa3LS/9Ov9b0fU+g==", + "dependencies": { + "@mdit-vue/types": "2.0.0", + "@types/markdown-it": "^13.0.7", + "gray-matter": "^4.0.3", + "markdown-it": "^14.0.0" + } + }, + "node_modules/@mdit-vue/plugin-frontmatter/node_modules/@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@mdit-vue/plugin-toc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-2.0.0.tgz", + "integrity": "sha512-PKQ8sZna3D5chTnt2lxL+ddpyXd++6Nyc0l8VXCeDgStlySQwiP9jaLeeC88oqY4BtRu4cAmILmxDrvuX0Rrdg==", + "dependencies": { + "@mdit-vue/shared": "2.0.0", + "@mdit-vue/types": "2.0.0", + "@types/markdown-it": "^13.0.7", + "markdown-it": "^14.0.0" + } + }, + "node_modules/@mdit-vue/plugin-toc/node_modules/@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@mdit-vue/shared": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-2.0.0.tgz", + "integrity": "sha512-PdxpQpbyTazeo2JT87qms6RPZIzyJd+gwuB+1jSwLDI7+0u5g79y2XgTAbZromSVgY2f3UU5HWdwaLbV9w4uOw==", + "dependencies": { + "@mdit-vue/types": "2.0.0", + "@types/markdown-it": "^13.0.7", + "markdown-it": "^14.0.0" + } + }, + "node_modules/@mdit-vue/shared/node_modules/@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@mdit-vue/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-2.0.0.tgz", + "integrity": "sha512-1BeEB+DbtmDMUAfvbNUj5Hso8cSl2sBVK2iTyOMAqhfDVLdh+/9+D0JmQHaCeUk/vuJoMhOwbweZvh55wHxm4w==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz", + "integrity": "sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz", + "integrity": "sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz", + "integrity": "sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz", + "integrity": "sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz", + "integrity": "sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz", + "integrity": "sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz", + "integrity": "sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz", + "integrity": "sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz", + "integrity": "sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz", + "integrity": "sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz", + "integrity": "sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz", + "integrity": "sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz", + "integrity": "sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", + "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", + "dev": true + }, + "node_modules/@tsconfig/node18": { + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.2.tgz", + "integrity": "sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==", + "dev": true + }, + "node_modules/@types/eslint": { + "version": "8.44.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", + "integrity": "sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==", + "devOptional": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.6.tgz", + "integrity": "sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==", + "devOptional": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "devOptional": true + }, + "node_modules/@types/linkify-it": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==" + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "peer": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==" + }, + "node_modules/@types/node": { + "version": "20.11.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz", + "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "peer": true + }, + "node_modules/@types/webfontloader": { + "version": "1.6.38", + "resolved": "https://registry.npmjs.org/@types/webfontloader/-/webfontloader-1.6.38.tgz", + "integrity": "sha512-kUaF72Fv202suFx6yBrwXqeVRMx7hGtJTesyESZgn9sEPCUeDXm2p0SiyS1MTqW74nQP4p7JyrOCwZ7pNFns4w==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz", + "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.1.1", + "@typescript-eslint/type-utils": "7.1.1", + "@typescript-eslint/utils": "7.1.1", + "@typescript-eslint/visitor-keys": "7.1.1", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz", + "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "7.1.1", + "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/visitor-keys": "7.1.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", + "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/visitor-keys": "7.1.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz", + "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/utils": "7.1.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", + "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", + "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/visitor-keys": "7.1.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", + "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.1.1", + "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/typescript-estree": "7.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", + "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "7.1.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@unhead/dom": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.8.13.tgz", + "integrity": "sha512-BWqtatmrcrT+rN/FBZ/Il7mW0TuPlS4bXrsZewAVanOPU3ahr+sHAIUDJmDjziBjSUsO5wLOEYXA+4t08AZnrQ==", + "dependencies": { + "@unhead/schema": "1.8.13", + "@unhead/shared": "1.8.13" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/@unhead/schema": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.8.13.tgz", + "integrity": "sha512-38SMOv/RaTtldOJx2/Mezlg3xlMeAAFtyI+M7vwj8Qb0xAosRc804ct3Xta5ecFMe9bEXQbZWEIKydU6ZV6B7w==", + "dependencies": { + "hookable": "^5.5.3", + "zhead": "^2.2.4" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/@unhead/shared": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.8.13.tgz", + "integrity": "sha512-NV/quz31oqkITx+Epwzgf01AaYMPTzvkEdg9jvGltTWeSHWKtowUeTRPfWUc3TTPtCzrYgHQQjGN8YOHdWjC7Q==", + "dependencies": { + "@unhead/schema": "1.8.13" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/@unhead/vue": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.8.13.tgz", + "integrity": "sha512-2CIwSeadfJxFfY44nz7U+w/F7lg646aw2t8G58P4A08t6KtPRoAVA0cR0iX+yqQEZIAKYEoaNINv3p/GMxyvBw==", + "dependencies": { + "@unhead/schema": "1.8.13", + "@unhead/shared": "1.8.13", + "hookable": "^5.5.3", + "unhead": "1.8.13" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + }, + "peerDependencies": { + "vue": ">=2.7 || >=3" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz", + "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3", + "@vue/babel-plugin-jsx": "^1.1.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.0.0" + } + }, + "node_modules/@volar/language-core": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.1.2.tgz", + "integrity": "sha512-5qsDp0Gf6fE09UWCeK7bkVn6NxMwC9OqFWQkMMkeej8h8XjyABPdRygC2RCrqDrfVdGijqlMQeXs6yRS+vfZYA==", + "dev": true, + "dependencies": { + "@volar/source-map": "2.1.2" + } + }, + "node_modules/@volar/source-map": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.1.2.tgz", + "integrity": "sha512-yFJqsuLm1OaWrsz9E3yd3bJcYIlHqdZ8MbmIoZLrAzMYQDcoF26/INIhgziEXSdyHc8xd7rd/tJdSnUyh0gH4Q==", + "dev": true, + "dependencies": { + "muggle-string": "^0.4.0" + } + }, + "node_modules/@volar/typescript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.1.2.tgz", + "integrity": "sha512-lhTancZqamvaLvoz0u/uth8dpudENNt2LFZOWCw9JZiX14xRFhdhfzmphiCRb7am9E6qAJSbdS/gMt1utXAoHQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.1.2", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", + "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", + "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "@vue/babel-helper-vue-transform-on": "^1.1.5", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz", + "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==", + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.21", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz", + "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==", + "dependencies": { + "@vue/compiler-core": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz", + "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==", + "dependencies": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.21", + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.7", + "postcss": "^8.4.35", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz", + "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==", + "dependencies": { + "@vue/compiler-dom": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-z1ZIAAUS9pKzo/ANEfd2sO+v2IUalz7cM/cTLOZ7vRFOPk5/xuRKQteOu1DErFLAh/lYGXMVZ0IfYKlyInuDVg==", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0" + }, + "peerDependencies": { + "eslint": ">= 8.0.0", + "prettier": ">= 3.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", + "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "vue-eslint-parser": "^9.3.1" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "peerDependencies": { + "eslint": "^8.56.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": ">=4.7.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.6.tgz", + "integrity": "sha512-UzqU12tzf9XLqRO3TiWPwRNpP4fyUzE6MAfOQWQNZ4jy6a30ARRUpmODDKq6O8C4goMc2AlPqTmjOHPjHkilSg==", + "dev": true, + "dependencies": { + "@volar/language-core": "~2.1.2", + "@vue/compiler-dom": "^3.4.0", + "@vue/shared": "^3.4.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz", + "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==", + "dependencies": { + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz", + "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==", + "dependencies": { + "@vue/reactivity": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz", + "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==", + "dependencies": { + "@vue/runtime-core": "3.4.21", + "@vue/shared": "3.4.21", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz", + "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==", + "dependencies": { + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21" + }, + "peerDependencies": { + "vue": "3.4.21" + } + }, + "node_modules/@vue/shared": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", + "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==" + }, + "node_modules/@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, + "node_modules/@vuetify/loader-shared": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.0.3.tgz", + "integrity": "sha512-Ss3GC7eJYkp2SF6xVzsT7FAruEmdihmn4OCk2+UocREerlXKWgOKKzTN5PN3ZVN5q05jHHrsNhTuWbhN61Bpdg==", + "dependencies": { + "upath": "^2.0.1" + }, + "peerDependencies": { + "vue": "^3.0.0", + "vuetify": "^3.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "devOptional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "devOptional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "devOptional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "devOptional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "devOptional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "devOptional": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "devOptional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "devOptional": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "devOptional": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "devOptional": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "devOptional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "devOptional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "devOptional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "devOptional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "devOptional": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "devOptional": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "devOptional": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "devOptional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "devOptional": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "devOptional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "devOptional": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "devOptional": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "devOptional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "dependencies": { + "resolve": "^1.17.0" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true, + "peer": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "dependencies": { + "run-applescript": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "devOptional": true, + "engines": { + "node": "*" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "devOptional": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true, + "peer": true + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "devOptional": true + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "devOptional": true, + "dependencies": { + "callsite": "^1.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "dependencies": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "dependencies": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domain-browser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.699", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz", + "integrity": "sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==", + "devOptional": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "devOptional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "devOptional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "devOptional": true, + "peer": true + }, + "node_modules/esbuild": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz", + "integrity": "sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.2", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "devOptional": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "devOptional": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "devOptional": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "devOptional": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "devOptional": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "devOptional": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "devOptional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-5.0.0.tgz", + "integrity": "sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==", + "devOptional": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "devOptional": true, + "peer": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "devOptional": true, + "peer": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "node_modules/human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.0.tgz", + "integrity": "sha512-asnTHw2K8OlqT5kVnQwX+AGKQqpvLo95LbNzQ/C0ln3yzentZmAdd0ygoD004VC4Kkd4PV7J2iaPQkqwp9yuTw==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "devOptional": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl/node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "devOptional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "devOptional": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "devOptional": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "devOptional": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "devOptional": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/markdown-it": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz", + "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.0.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "devOptional": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "devOptional": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "devOptional": true, + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "devOptional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true, + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "devOptional": true + }, + "node_modules/node-stdlib-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", + "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", + "dev": true, + "dependencies": { + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.11.0", + "domain-browser": "^4.22.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/node_modules/pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "dependencies": { + "find-up": "^5.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-stdlib-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/node-stdlib-browser/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-all2": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.1.2.tgz", + "integrity": "sha512-WwwnS8Ft+RpXve6T2EIEVpFLSqN+ORHRvgNk3H9N62SZXjmzKoRhMFg3I17TK3oMaAEr+XFbRirWS2Fn3BCPSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^3.0.2", + "shell-quote": "^1.7.3" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0", + "npm": ">= 8" + } + }, + "node_modules/npm-run-all2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm-run-all2/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm-run-all2/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "devOptional": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "dependencies": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinia": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "devOptional": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "devOptional": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "devOptional": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "devOptional": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "devOptional": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "devOptional": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "devOptional": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pptxgenjs": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/pptxgenjs/-/pptxgenjs-3.7.1.tgz", + "integrity": "sha512-j1WX7CJHiof6ETHtQe1zQCE+T6V+F3aUWaAqNtK+T495aICEjcy35zbxlsCeNULUcmItxXMGDIM4pz+5FEr+gQ==", + "dependencies": { + "@types/node": "^16.0.0", + "https": "^1.0.0", + "image-size": "^1.0.0", + "jszip": "^3.6.0" + } + }, + "node_modules/pptxgenjs/node_modules/@types/node": { + "version": "16.18.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.68.tgz", + "integrity": "sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "devOptional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "devOptional": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/roboto-fontface": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", + "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==" + }, + "node_modules/rollup": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.1.tgz", + "integrity": "sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.12.1", + "@rollup/rollup-android-arm64": "4.12.1", + "@rollup/rollup-darwin-arm64": "4.12.1", + "@rollup/rollup-darwin-x64": "4.12.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.1", + "@rollup/rollup-linux-arm64-gnu": "4.12.1", + "@rollup/rollup-linux-arm64-musl": "4.12.1", + "@rollup/rollup-linux-riscv64-gnu": "4.12.1", + "@rollup/rollup-linux-x64-gnu": "4.12.1", + "@rollup/rollup-linux-x64-musl": "4.12.1", + "@rollup/rollup-win32-arm64-msvc": "4.12.1", + "@rollup/rollup-win32-ia32-msvc": "4.12.1", + "@rollup/rollup-win32-x64-msvc": "4.12.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", + "dependencies": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + } + }, + "node_modules/rollup-plugin-inject/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "node_modules/rollup-plugin-inject/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "dependencies": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "node_modules/run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/run-applescript/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/run-applescript/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-applescript/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/run-applescript/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-applescript/node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "devOptional": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "devOptional": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "devOptional": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "devOptional": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "dependencies": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "devOptional": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "devOptional": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "devOptional": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.0.0.tgz", + "integrity": "sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, + "node_modules/unhead": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.8.13.tgz", + "integrity": "sha512-VL1eOXc1U0zI6XO2JJQ98tywcEW9cM6tfrmuNcltOKSB7Xg3isVXFSf2bEbO4XPUjg8D5Uy3Q3Zi9cN9XSiTyA==", + "dependencies": { + "@unhead/dom": "1.8.13", + "@unhead/schema": "1.8.13", + "@unhead/shared": "1.8.13", + "hookable": "^5.5.3" + }, + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "devOptional": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "devOptional": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vite": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-node-polyfills": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.21.0.tgz", + "integrity": "sha512-Sk4DiKnmxN8E0vhgEhzLudfJQfaT8k4/gJ25xvUPG54KjLJ6HAmDKbr4rzDD/QWEY+Lwg80KE85fGYBQihEPQA==", + "dev": true, + "dependencies": { + "@rollup/plugin-inject": "^5.0.5", + "node-stdlib-browser": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/davidmyersdev" + }, + "peerDependencies": { + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/vite-plugin-vuetify": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vite-plugin-vuetify/-/vite-plugin-vuetify-2.0.3.tgz", + "integrity": "sha512-HbYajgGgb/noaVKNRhnnXIiQZrNXfNIeanUGAwXgOxL6h/KULS40Uf51Kyz8hNmdegF+DwjgXXI/8J1PNS83xw==", + "dependencies": { + "@vuetify/loader-shared": "^2.0.3", + "debug": "^4.3.3", + "upath": "^2.0.1" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": ">=5", + "vue": "^3.0.0", + "vuetify": "^3.0.0" + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/vue": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz", + "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==", + "dependencies": { + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-sfc": "3.4.21", + "@vue/runtime-dom": "3.4.21", + "@vue/server-renderer": "3.4.21", + "@vue/shared": "3.4.21" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-cli-plugin-vuetify": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-2.5.8.tgz", + "integrity": "sha512-uqi0/URJETJBbWlQHD1l0pnY7JN8Ytu+AL1fw50HFlGByPa8/xx+mq19GkFXA9FcwFT01IqEc/TkxMPugchomg==", + "dev": true, + "dependencies": { + "null-loader": "^4.0.1", + "semver": "^7.1.2", + "shelljs": "^0.8.3" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "sass-loader": { + "optional": true + }, + "vuetify-loader": { + "optional": true + } + } + }, + "node_modules/vue-cli-plugin-vuetify/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-cli-plugin-vuetify/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-cli-plugin-vuetify/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/vue-draggable-plus": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/vue-draggable-plus/-/vue-draggable-plus-0.3.5.tgz", + "integrity": "sha512-HqIxV4Wr4U5LRPLRi2oV+EJ4g6ibyRKhuaiH4ZQo+LxK4zrk2XcBk9UyXC88OXp4SAq0XYH4Wco/T3LX5kJ79A==", + "peerDependencies": { + "@types/sortablejs": "^1.15.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", + "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-eslint-parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/vue-gtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vue-gtag/-/vue-gtag-2.0.1.tgz", + "integrity": "sha512-aM4A58FVL0wV2ptYi+xzAjeg+pQVRyUcfBc5UkXAwQrR4t3WBhor50Izp2I+3Oo7+l+vWJ7u78DGcNzReb8S/A==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.0.tgz", + "integrity": "sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.1" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.6.tgz", + "integrity": "sha512-kK50W4XqQL34vHRkxlRWLicrT6+F9xfgCgJ4KSmCHcytKzc1u3c94XXgI+CjmhOSxyw0krpExF7Obo7y4+0dVQ==", + "dev": true, + "dependencies": { + "@volar/typescript": "~2.1.2", + "@vue/language-core": "2.0.6", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/vue-tsc/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-tsc/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-tsc/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/vuetify": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.5.8.tgz", + "integrity": "sha512-8nGS+lKejZkev55HFwIfsRt+9fOqbeDQNmXxfmLKAlnUT8FtynVwbjAwHMtX/OQAQ3ZwRaR1ptqQQmx3OgxzbQ==", + "engines": { + "node": "^12.20 || >=14.13" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/johnleider" + }, + "peerDependencies": { + "typescript": ">=4.7", + "vite-plugin-vuetify": ">=1.0.0-alpha.12", + "vue": "^3.3.0", + "vue-i18n": "^9.0.0", + "webpack-plugin-vuetify": ">=2.0.0-alpha.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vite-plugin-vuetify": { + "optional": true + }, + "vue-i18n": { + "optional": true + }, + "webpack-plugin-vuetify": { + "optional": true + } + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "devOptional": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" + }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "devOptional": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-plugin-vuetify": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/webpack-plugin-vuetify/-/webpack-plugin-vuetify-3.0.3.tgz", + "integrity": "sha512-pYTLcrufc00PzqHZhG/zLylGE07uC0hB6SisvSYuN6hyjKCf9rtdm2UaIG7kExfhZa3U1WKU7mYXFi1jDEc+vQ==", + "devOptional": true, + "dependencies": { + "@vuetify/loader-shared": "^2.0.3", + "decache": "^4.6.0", + "file-loader": "^6.2.0", + "find-cache-dir": "^5.0.0", + "loader-utils": "^2.0.0", + "mkdirp": "^1.0.4", + "null-loader": "^4.0.1", + "upath": "^2.0.1" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.2.6", + "vue": "^3.2.6", + "vuetify": "^3.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "devOptional": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "devOptional": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "devOptional": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "devOptional": true, + "peer": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zhead": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz", + "integrity": "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==", + "funding": { + "url": "https://github.com/sponsors/harlan-zw" + } + } + }, + "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + } + }, + "@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true + }, + "@babel/core": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.0.tgz", + "integrity": "sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.0", + "@babel/parser": "^7.24.0", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + } + }, + "@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "requires": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz", + "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "dev": true, + "requires": { + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", + "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", + "dev": true, + "requires": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0" + } + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==" + }, + "@babel/plugin-syntax-jsx": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", + "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" + } + }, + "@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + } + }, + "@babel/traverse": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@esbuild-plugins/node-globals-polyfill": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", + "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", + "requires": {} + }, + "@esbuild-plugins/node-modules-polyfill": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", + "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", + "requires": { + "escape-string-regexp": "^4.0.0", + "rollup-plugin-node-polyfills": "^0.2.1" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + } + } + }, + "@esbuild/aix-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", + "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", + "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", + "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", + "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", + "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", + "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", + "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", + "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", + "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", + "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", + "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", + "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", + "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", + "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", + "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", + "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", + "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", + "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", + "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", + "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", + "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", + "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", + "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "devOptional": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "devOptional": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "devOptional": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "devOptional": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "devOptional": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@mdi/font": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz", + "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==" + }, + "@mdit-vue/plugin-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-frontmatter/-/plugin-frontmatter-2.0.0.tgz", + "integrity": "sha512-/LrT6E60QI4XV4mqx3J87hqYXlR7ZyMvndmftR2RGz7cRAwa/xL+kyFLlgrMxkBIKitOShKa3LS/9Ov9b0fU+g==", + "requires": { + "@mdit-vue/types": "2.0.0", + "@types/markdown-it": "^13.0.7", + "gray-matter": "^4.0.3", + "markdown-it": "^14.0.0" + }, + "dependencies": { + "@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + } + } + }, + "@mdit-vue/plugin-toc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/plugin-toc/-/plugin-toc-2.0.0.tgz", + "integrity": "sha512-PKQ8sZna3D5chTnt2lxL+ddpyXd++6Nyc0l8VXCeDgStlySQwiP9jaLeeC88oqY4BtRu4cAmILmxDrvuX0Rrdg==", + "requires": { + "@mdit-vue/shared": "2.0.0", + "@mdit-vue/types": "2.0.0", + "@types/markdown-it": "^13.0.7", + "markdown-it": "^14.0.0" + }, + "dependencies": { + "@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + } + } + }, + "@mdit-vue/shared": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/shared/-/shared-2.0.0.tgz", + "integrity": "sha512-PdxpQpbyTazeo2JT87qms6RPZIzyJd+gwuB+1jSwLDI7+0u5g79y2XgTAbZromSVgY2f3UU5HWdwaLbV9w4uOw==", + "requires": { + "@mdit-vue/types": "2.0.0", + "@types/markdown-it": "^13.0.7", + "markdown-it": "^14.0.0" + }, + "dependencies": { + "@types/markdown-it": { + "version": "13.0.7", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-13.0.7.tgz", + "integrity": "sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==", + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + } + } + }, + "@mdit-vue/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@mdit-vue/types/-/types-2.0.0.tgz", + "integrity": "sha512-1BeEB+DbtmDMUAfvbNUj5Hso8cSl2sBVK2iTyOMAqhfDVLdh+/9+D0JmQHaCeUk/vuJoMhOwbweZvh55wHxm4w==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@pkgr/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "fast-glob": "^3.3.0", + "is-glob": "^4.0.3", + "open": "^9.1.0", + "picocolors": "^1.0.0", + "tslib": "^2.6.0" + } + }, + "@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + } + }, + "@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz", + "integrity": "sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==", + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz", + "integrity": "sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==", + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz", + "integrity": "sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==", + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz", + "integrity": "sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==", + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz", + "integrity": "sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==", + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz", + "integrity": "sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==", + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz", + "integrity": "sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==", + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz", + "integrity": "sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==", + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz", + "integrity": "sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==", + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz", + "integrity": "sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==", + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz", + "integrity": "sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==", + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz", + "integrity": "sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==", + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz", + "integrity": "sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==", + "optional": true + }, + "@rushstack/eslint-patch": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", + "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", + "dev": true + }, + "@tsconfig/node18": { + "version": "18.2.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.2.tgz", + "integrity": "sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==", + "dev": true + }, + "@types/eslint": { + "version": "8.44.6", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.6.tgz", + "integrity": "sha512-P6bY56TVmX8y9J87jHNgQh43h6VVU+6H7oN7hgvivV81K2XY8qJZ5vqPy/HdUoVIelii2kChYVzQanlswPWVFw==", + "devOptional": true, + "peer": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.6", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.6.tgz", + "integrity": "sha512-zfM4ipmxVKWdxtDaJ3MP3pBurDXOCoyjvlpE3u6Qzrmw4BPbfm4/ambIeTk/r/J0iq/+2/xp0Fmt+gFvXJY2PQ==", + "devOptional": true, + "peer": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "@types/json-schema": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", + "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", + "devOptional": true + }, + "@types/linkify-it": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==" + }, + "@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "peer": true, + "requires": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "@types/mdurl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==" + }, + "@types/node": { + "version": "20.11.25", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz", + "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==", + "devOptional": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "@types/sortablejs": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/sortablejs/-/sortablejs-1.15.8.tgz", + "integrity": "sha512-b79830lW+RZfwaztgs1aVPgbasJ8e7AXtZYHTELNXZPsERt4ymJdjV4OccDbHQAvHrCcFpbF78jkm0R6h/pZVg==", + "peer": true + }, + "@types/webfontloader": { + "version": "1.6.38", + "resolved": "https://registry.npmjs.org/@types/webfontloader/-/webfontloader-1.6.38.tgz", + "integrity": "sha512-kUaF72Fv202suFx6yBrwXqeVRMx7hGtJTesyESZgn9sEPCUeDXm2p0SiyS1MTqW74nQP4p7JyrOCwZ7pNFns4w==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz", + "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.1.1", + "@typescript-eslint/type-utils": "7.1.1", + "@typescript-eslint/utils": "7.1.1", + "@typescript-eslint/visitor-keys": "7.1.1", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz", + "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "7.1.1", + "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/visitor-keys": "7.1.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", + "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/visitor-keys": "7.1.1" + } + }, + "@typescript-eslint/type-utils": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz", + "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/utils": "7.1.1", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + } + }, + "@typescript-eslint/types": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", + "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", + "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/visitor-keys": "7.1.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/utils": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", + "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.1.1", + "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/typescript-estree": "7.1.1", + "semver": "^7.5.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", + "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "7.1.1", + "eslint-visitor-keys": "^3.4.1" + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "@unhead/dom": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@unhead/dom/-/dom-1.8.13.tgz", + "integrity": "sha512-BWqtatmrcrT+rN/FBZ/Il7mW0TuPlS4bXrsZewAVanOPU3ahr+sHAIUDJmDjziBjSUsO5wLOEYXA+4t08AZnrQ==", + "requires": { + "@unhead/schema": "1.8.13", + "@unhead/shared": "1.8.13" + } + }, + "@unhead/schema": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@unhead/schema/-/schema-1.8.13.tgz", + "integrity": "sha512-38SMOv/RaTtldOJx2/Mezlg3xlMeAAFtyI+M7vwj8Qb0xAosRc804ct3Xta5ecFMe9bEXQbZWEIKydU6ZV6B7w==", + "requires": { + "hookable": "^5.5.3", + "zhead": "^2.2.4" + } + }, + "@unhead/shared": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@unhead/shared/-/shared-1.8.13.tgz", + "integrity": "sha512-NV/quz31oqkITx+Epwzgf01AaYMPTzvkEdg9jvGltTWeSHWKtowUeTRPfWUc3TTPtCzrYgHQQjGN8YOHdWjC7Q==", + "requires": { + "@unhead/schema": "1.8.13" + } + }, + "@unhead/vue": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@unhead/vue/-/vue-1.8.13.tgz", + "integrity": "sha512-2CIwSeadfJxFfY44nz7U+w/F7lg646aw2t8G58P4A08t6KtPRoAVA0cR0iX+yqQEZIAKYEoaNINv3p/GMxyvBw==", + "requires": { + "@unhead/schema": "1.8.13", + "@unhead/shared": "1.8.13", + "hookable": "^5.5.3", + "unhead": "1.8.13" + } + }, + "@vitejs/plugin-vue": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.4.tgz", + "integrity": "sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==", + "dev": true, + "requires": {} + }, + "@vitejs/plugin-vue-jsx": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-3.1.0.tgz", + "integrity": "sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==", + "dev": true, + "requires": { + "@babel/core": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3", + "@vue/babel-plugin-jsx": "^1.1.5" + } + }, + "@volar/language-core": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.1.2.tgz", + "integrity": "sha512-5qsDp0Gf6fE09UWCeK7bkVn6NxMwC9OqFWQkMMkeej8h8XjyABPdRygC2RCrqDrfVdGijqlMQeXs6yRS+vfZYA==", + "dev": true, + "requires": { + "@volar/source-map": "2.1.2" + } + }, + "@volar/source-map": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.1.2.tgz", + "integrity": "sha512-yFJqsuLm1OaWrsz9E3yd3bJcYIlHqdZ8MbmIoZLrAzMYQDcoF26/INIhgziEXSdyHc8xd7rd/tJdSnUyh0gH4Q==", + "dev": true, + "requires": { + "muggle-string": "^0.4.0" + } + }, + "@volar/typescript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.1.2.tgz", + "integrity": "sha512-lhTancZqamvaLvoz0u/uth8dpudENNt2LFZOWCw9JZiX14xRFhdhfzmphiCRb7am9E6qAJSbdS/gMt1utXAoHQ==", + "dev": true, + "requires": { + "@volar/language-core": "2.1.2", + "path-browserify": "^1.0.1" + } + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.1.5.tgz", + "integrity": "sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.5.tgz", + "integrity": "sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "@vue/babel-helper-vue-transform-on": "^1.1.5", + "camelcase": "^6.3.0", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + } + }, + "@vue/compiler-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.21.tgz", + "integrity": "sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==", + "requires": { + "@babel/parser": "^7.23.9", + "@vue/shared": "3.4.21", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.21.tgz", + "integrity": "sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==", + "requires": { + "@vue/compiler-core": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "@vue/compiler-sfc": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.21.tgz", + "integrity": "sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==", + "requires": { + "@babel/parser": "^7.23.9", + "@vue/compiler-core": "3.4.21", + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.7", + "postcss": "^8.4.35", + "source-map-js": "^1.0.2" + } + }, + "@vue/compiler-ssr": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.21.tgz", + "integrity": "sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==", + "requires": { + "@vue/compiler-dom": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "@vue/eslint-config-prettier": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-z1ZIAAUS9pKzo/ANEfd2sO+v2IUalz7cM/cTLOZ7vRFOPk5/xuRKQteOu1DErFLAh/lYGXMVZ0IfYKlyInuDVg==", + "dev": true, + "requires": { + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0" + } + }, + "@vue/eslint-config-typescript": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-13.0.0.tgz", + "integrity": "sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "vue-eslint-parser": "^9.3.1" + } + }, + "@vue/language-core": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.6.tgz", + "integrity": "sha512-UzqU12tzf9XLqRO3TiWPwRNpP4fyUzE6MAfOQWQNZ4jy6a30ARRUpmODDKq6O8C4goMc2AlPqTmjOHPjHkilSg==", + "dev": true, + "requires": { + "@volar/language-core": "~2.1.2", + "@vue/compiler-dom": "^3.4.0", + "@vue/shared": "^3.4.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@vue/reactivity": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.21.tgz", + "integrity": "sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==", + "requires": { + "@vue/shared": "3.4.21" + } + }, + "@vue/runtime-core": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.21.tgz", + "integrity": "sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==", + "requires": { + "@vue/reactivity": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "@vue/runtime-dom": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.21.tgz", + "integrity": "sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==", + "requires": { + "@vue/runtime-core": "3.4.21", + "@vue/shared": "3.4.21", + "csstype": "^3.1.3" + } + }, + "@vue/server-renderer": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.21.tgz", + "integrity": "sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==", + "requires": { + "@vue/compiler-ssr": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "@vue/shared": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.21.tgz", + "integrity": "sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==" + }, + "@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, + "@vuetify/loader-shared": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.0.3.tgz", + "integrity": "sha512-Ss3GC7eJYkp2SF6xVzsT7FAruEmdihmn4OCk2+UocREerlXKWgOKKzTN5PN3ZVN5q05jHHrsNhTuWbhN61Bpdg==", + "requires": { + "upath": "^2.0.1" + } + }, + "@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "devOptional": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "devOptional": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "devOptional": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "devOptional": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "devOptional": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "devOptional": true, + "peer": true + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "devOptional": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "devOptional": true, + "peer": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "devOptional": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "devOptional": true, + "requires": {} + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "devOptional": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bplist-parser": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", + "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "devOptional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "requires": { + "resolve": "^1.17.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "devOptional": true, + "requires": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true, + "peer": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bundle-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", + "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", + "dev": true, + "requires": { + "run-applescript": "^5.0.0" + } + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==", + "devOptional": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001597", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001597.tgz", + "integrity": "sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==", + "devOptional": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "devOptional": true, + "peer": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true, + "peer": true + }, + "common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "devOptional": true + }, + "computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decache": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/decache/-/decache-4.6.2.tgz", + "integrity": "sha512-2LPqkLeu8XWHU8qNCS3kcF6sCcb5zIzvWaAHYSvPfwhdd7mHuah29NssMzrTYyHN4F5oFy2ko9OBYxegtU0FEw==", + "devOptional": true, + "requires": { + "callsite": "^1.0.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "default-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", + "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", + "dev": true, + "requires": { + "bundle-name": "^3.0.0", + "default-browser-id": "^3.0.0", + "execa": "^7.1.1", + "titleize": "^3.0.0" + } + }, + "default-browser-id": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", + "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", + "dev": true, + "requires": { + "bplist-parser": "^0.2.0", + "untildify": "^4.0.0" + } + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "domain-browser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.699", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz", + "integrity": "sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==", + "devOptional": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "devOptional": true + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "devOptional": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "devOptional": true, + "peer": true + }, + "esbuild": { + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", + "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "requires": { + "@esbuild/aix-ppc64": "0.20.1", + "@esbuild/android-arm": "0.20.1", + "@esbuild/android-arm64": "0.20.1", + "@esbuild/android-x64": "0.20.1", + "@esbuild/darwin-arm64": "0.20.1", + "@esbuild/darwin-x64": "0.20.1", + "@esbuild/freebsd-arm64": "0.20.1", + "@esbuild/freebsd-x64": "0.20.1", + "@esbuild/linux-arm": "0.20.1", + "@esbuild/linux-arm64": "0.20.1", + "@esbuild/linux-ia32": "0.20.1", + "@esbuild/linux-loong64": "0.20.1", + "@esbuild/linux-mips64el": "0.20.1", + "@esbuild/linux-ppc64": "0.20.1", + "@esbuild/linux-riscv64": "0.20.1", + "@esbuild/linux-s390x": "0.20.1", + "@esbuild/linux-x64": "0.20.1", + "@esbuild/netbsd-x64": "0.20.1", + "@esbuild/openbsd-x64": "0.20.1", + "@esbuild/sunos-x64": "0.20.1", + "@esbuild/win32-arm64": "0.20.1", + "@esbuild/win32-ia32": "0.20.1", + "@esbuild/win32-x64": "0.20.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "devOptional": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz", + "integrity": "sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.5" + } + }, + "eslint-plugin-vue": { + "version": "9.22.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz", + "integrity": "sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.2", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + }, + "espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "requires": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "devOptional": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "devOptional": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "devOptional": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", + "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "devOptional": true + }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "devOptional": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "devOptional": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "devOptional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-5.0.0.tgz", + "integrity": "sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==", + "devOptional": true, + "requires": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "devOptional": true, + "peer": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "devOptional": true, + "peer": true + }, + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true + }, + "https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "human-signals": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", + "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true + }, + "image-size": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.0.tgz", + "integrity": "sha512-asnTHw2K8OlqT5kVnQwX+AGKQqpvLo95LbNzQ/C0ln3yzentZmAdd0ygoD004VC4Kkd4PV7J2iaPQkqwp9yuTw==", + "requires": { + "queue": "6.0.2" + } + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "devOptional": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true + }, + "is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + } + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + }, + "dependencies": { + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + } + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isomorphic-timers-promises": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-timers-promises/-/isomorphic-timers-promises-1.0.1.tgz", + "integrity": "sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==", + "dev": true + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "devOptional": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "peer": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "devOptional": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "devOptional": true + }, + "jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==" + }, + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "requires": { + "immediate": "~3.0.5" + } + }, + "linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "requires": { + "uc.micro": "^2.0.0" + } + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "devOptional": true, + "peer": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "devOptional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "markdown-it": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.0.0.tgz", + "integrity": "sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==", + "requires": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.0.0" + } + }, + "markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "requires": {} + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==" + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "devOptional": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "devOptional": true, + "peer": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "devOptional": true, + "peer": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "devOptional": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true, + "peer": true + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "devOptional": true + }, + "node-stdlib-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/node-stdlib-browser/-/node-stdlib-browser-1.2.0.tgz", + "integrity": "sha512-VSjFxUhRhkyed8AtLwSCkMrJRfQ3e2lGtG3sP6FEgaLKBBbxM/dLfjRe1+iLhjvyLFW3tBQ8+c0pcOtXGbAZJg==", + "dev": true, + "requires": { + "assert": "^2.0.0", + "browser-resolve": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^5.7.1", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "create-require": "^1.1.1", + "crypto-browserify": "^3.11.0", + "domain-browser": "^4.22.0", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "isomorphic-timers-promises": "^1.0.1", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "pkg-dir": "^5.0.0", + "process": "^0.11.10", + "punycode": "^1.4.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "pkg-dir": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", + "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", + "dev": true, + "requires": { + "find-up": "^5.0.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-run-all2": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-6.1.2.tgz", + "integrity": "sha512-WwwnS8Ft+RpXve6T2EIEVpFLSqN+ORHRvgNk3H9N62SZXjmzKoRhMFg3I17TK3oMaAEr+XFbRirWS2Fn3BCPSg==", + "dev": true, + "requires": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^9.0.0", + "pidtree": "^0.6.0", + "read-package-json-fast": "^3.0.2", + "shell-quote": "^1.7.3" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "requires": { + "path-key": "^4.0.0" + }, + "dependencies": { + "path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true + } + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "null-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", + "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", + "devOptional": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "requires": { + "mimic-fn": "^4.0.0" + } + }, + "open": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", + "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "dev": true, + "requires": { + "default-browser": "^4.0.0", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true + }, + "pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true + }, + "pinia": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "requires": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "dependencies": { + "vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "requires": {} + } + } + }, + "pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "devOptional": true, + "requires": { + "find-up": "^6.3.0" + }, + "dependencies": { + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "devOptional": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "devOptional": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "devOptional": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "devOptional": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "devOptional": true + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "devOptional": true + } + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==" + }, + "postcss": { + "version": "8.4.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", + "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "requires": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "pptxgenjs": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/pptxgenjs/-/pptxgenjs-3.7.1.tgz", + "integrity": "sha512-j1WX7CJHiof6ETHtQe1zQCE+T6V+F3aUWaAqNtK+T495aICEjcy35zbxlsCeNULUcmItxXMGDIM4pz+5FEr+gQ==", + "requires": { + "@types/node": "^16.0.0", + "https": "^1.0.0", + "image-size": "^1.0.0", + "jszip": "^3.6.0" + }, + "dependencies": { + "@types/node": { + "version": "16.18.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.68.tgz", + "integrity": "sha512-sG3hPIQwJLoewrN7cr0dwEy+yF5nD4D/4FxtQpFciRD/xwUzgD+G05uxZHv5mhfXo4F9Jkp13jjn0CC2q325sg==" + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "devOptional": true + }, + "punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==" + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "devOptional": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "raw-loader": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz", + "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "roboto-fontface": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/roboto-fontface/-/roboto-fontface-0.10.0.tgz", + "integrity": "sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==" + }, + "rollup": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.1.tgz", + "integrity": "sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==", + "requires": { + "@rollup/rollup-android-arm-eabi": "4.12.1", + "@rollup/rollup-android-arm64": "4.12.1", + "@rollup/rollup-darwin-arm64": "4.12.1", + "@rollup/rollup-darwin-x64": "4.12.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.12.1", + "@rollup/rollup-linux-arm64-gnu": "4.12.1", + "@rollup/rollup-linux-arm64-musl": "4.12.1", + "@rollup/rollup-linux-riscv64-gnu": "4.12.1", + "@rollup/rollup-linux-x64-gnu": "4.12.1", + "@rollup/rollup-linux-x64-musl": "4.12.1", + "@rollup/rollup-win32-arm64-msvc": "4.12.1", + "@rollup/rollup-win32-ia32-msvc": "4.12.1", + "@rollup/rollup-win32-x64-msvc": "4.12.1", + "@types/estree": "1.0.5", + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-inject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", + "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", + "requires": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "rollup-plugin-node-polyfills": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", + "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", + "requires": { + "rollup-plugin-inject": "^3.0.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==" + } + } + }, + "run-applescript": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", + "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + }, + "dependencies": { + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "devOptional": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "devOptional": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "devOptional": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "devOptional": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, + "peer": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "devOptional": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" + }, + "strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "synckit": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", + "integrity": "sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.1", + "tslib": "^2.5.0" + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "devOptional": true, + "peer": true + }, + "terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "devOptional": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "devOptional": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "titleize": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", + "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "requires": {} + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "devOptional": true + }, + "uc.micro": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.0.0.tgz", + "integrity": "sha512-DffL94LsNOccVn4hyfRe5rdKa273swqeA5DJpMOeFmEn1wCDc7nAbbB0gXlgBCL7TNzeTv6G7XVWzan7iJtfig==" + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, + "unhead": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/unhead/-/unhead-1.8.13.tgz", + "integrity": "sha512-VL1eOXc1U0zI6XO2JJQ98tywcEW9cM6tfrmuNcltOKSB7Xg3isVXFSf2bEbO4XPUjg8D5Uy3Q3Zi9cN9XSiTyA==", + "requires": { + "@unhead/dom": "1.8.13", + "@unhead/schema": "1.8.13", + "@unhead/shared": "1.8.13", + "hookable": "^5.5.3" + } + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, + "upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==" + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "devOptional": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "devOptional": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "vite": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", + "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "requires": { + "esbuild": "^0.19.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.35", + "rollup": "^4.2.0" + }, + "dependencies": { + "@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "optional": true + }, + "esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "requires": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + } + } + }, + "vite-plugin-node-polyfills": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.21.0.tgz", + "integrity": "sha512-Sk4DiKnmxN8E0vhgEhzLudfJQfaT8k4/gJ25xvUPG54KjLJ6HAmDKbr4rzDD/QWEY+Lwg80KE85fGYBQihEPQA==", + "dev": true, + "requires": { + "@rollup/plugin-inject": "^5.0.5", + "node-stdlib-browser": "^1.2.0" + } + }, + "vite-plugin-vuetify": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vite-plugin-vuetify/-/vite-plugin-vuetify-2.0.3.tgz", + "integrity": "sha512-HbYajgGgb/noaVKNRhnnXIiQZrNXfNIeanUGAwXgOxL6h/KULS40Uf51Kyz8hNmdegF+DwjgXXI/8J1PNS83xw==", + "requires": { + "@vuetify/loader-shared": "^2.0.3", + "debug": "^4.3.3", + "upath": "^2.0.1" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vue": { + "version": "3.4.21", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz", + "integrity": "sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==", + "requires": { + "@vue/compiler-dom": "3.4.21", + "@vue/compiler-sfc": "3.4.21", + "@vue/runtime-dom": "3.4.21", + "@vue/server-renderer": "3.4.21", + "@vue/shared": "3.4.21" + } + }, + "vue-cli-plugin-vuetify": { + "version": "2.5.8", + "resolved": "https://registry.npmjs.org/vue-cli-plugin-vuetify/-/vue-cli-plugin-vuetify-2.5.8.tgz", + "integrity": "sha512-uqi0/URJETJBbWlQHD1l0pnY7JN8Ytu+AL1fw50HFlGByPa8/xx+mq19GkFXA9FcwFT01IqEc/TkxMPugchomg==", + "dev": true, + "requires": { + "null-loader": "^4.0.1", + "semver": "^7.1.2", + "shelljs": "^0.8.3" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "vue-draggable-plus": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/vue-draggable-plus/-/vue-draggable-plus-0.3.5.tgz", + "integrity": "sha512-HqIxV4Wr4U5LRPLRi2oV+EJ4g6ibyRKhuaiH4ZQo+LxK4zrk2XcBk9UyXC88OXp4SAq0XYH4Wco/T3LX5kJ79A==", + "requires": {} + }, + "vue-eslint-parser": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", + "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "vue-gtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vue-gtag/-/vue-gtag-2.0.1.tgz", + "integrity": "sha512-aM4A58FVL0wV2ptYi+xzAjeg+pQVRyUcfBc5UkXAwQrR4t3WBhor50Izp2I+3Oo7+l+vWJ7u78DGcNzReb8S/A==", + "requires": {} + }, + "vue-router": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.0.tgz", + "integrity": "sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==", + "requires": { + "@vue/devtools-api": "^6.5.1" + } + }, + "vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "vue-tsc": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.6.tgz", + "integrity": "sha512-kK50W4XqQL34vHRkxlRWLicrT6+F9xfgCgJ4KSmCHcytKzc1u3c94XXgI+CjmhOSxyw0krpExF7Obo7y4+0dVQ==", + "dev": true, + "requires": { + "@volar/typescript": "~2.1.2", + "@vue/language-core": "2.0.6", + "semver": "^7.5.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "vuetify": { + "version": "3.5.8", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.5.8.tgz", + "integrity": "sha512-8nGS+lKejZkev55HFwIfsRt+9fOqbeDQNmXxfmLKAlnUT8FtynVwbjAwHMtX/OQAQ3ZwRaR1ptqQQmx3OgxzbQ==", + "requires": {} + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "devOptional": true, + "peer": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webfontloader": { + "version": "1.6.28", + "resolved": "https://registry.npmjs.org/webfontloader/-/webfontloader-1.6.28.tgz", + "integrity": "sha512-Egb0oFEga6f+nSgasH3E0M405Pzn6y3/9tOVanv/DLfa1YBIgcv90L18YyWnvXkRbIM17v5Kv6IT2N6g1x5tvQ==" + }, + "webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "devOptional": true, + "peer": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "devOptional": true, + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "devOptional": true, + "peer": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "devOptional": true, + "peer": true + } + } + }, + "webpack-plugin-vuetify": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/webpack-plugin-vuetify/-/webpack-plugin-vuetify-3.0.3.tgz", + "integrity": "sha512-pYTLcrufc00PzqHZhG/zLylGE07uC0hB6SisvSYuN6hyjKCf9rtdm2UaIG7kExfhZa3U1WKU7mYXFi1jDEc+vQ==", + "devOptional": true, + "requires": { + "@vuetify/loader-shared": "^2.0.3", + "decache": "^4.6.0", + "file-loader": "^6.2.0", + "find-cache-dir": "^5.0.0", + "loader-utils": "^2.0.0", + "mkdirp": "^1.0.4", + "null-loader": "^4.0.1", + "upath": "^2.0.1" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "devOptional": true, + "peer": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true + }, + "zhead": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/zhead/-/zhead-2.2.4.tgz", + "integrity": "sha512-8F0OI5dpWIA5IGG5NHUg9staDwz/ZPxZtvGVf01j7vHqSyZ0raHY+78atOVxRqb73AotX22uV1pXt3gYSstGag==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..a3df7e86 --- /dev/null +++ b/package.json @@ -0,0 +1,62 @@ +{ + "name": "atlas-website", + "type": "module", + "version": "4.0.0", + "private": true, + "scripts": { + "build": "run-p type-check \"build-only {@}\" --", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "build-only": "vite build", + "dev": "vite", + "format": "prettier --write src/", + "preview": "vite preview", + "type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false" + }, + "dependencies": { + "@esbuild-plugins/node-globals-polyfill": "^0.2.3", + "@esbuild-plugins/node-modules-polyfill": "^0.2.2", + "@mdi/font": "7.4.47", + "@mdit-vue/plugin-frontmatter": "^2.0.0", + "@mdit-vue/plugin-toc": "^2.0.0", + "@unhead/vue": "^1.8.13", + "esbuild": "^0.20.1", + "js-yaml": "^4.1.0", + "jsonschema": "^1.4.1", + "markdown-it": "^14.0.0", + "markdown-it-anchor": "^8.6.7", + "pinia": "^2.1.7", + "pluralize": "^8.0.0", + "pptxgenjs": "3.7.1", + "roboto-fontface": "*", + "vite-plugin-vuetify": "^2.0.3", + "vue": "^3.4.21", + "vue-draggable-plus": "^0.3.5", + "vue-gtag": "^2.0.1", + "vue-router": "^4.3.0", + "vuetify": "^3.5.8", + "webfontloader": "^1.6.28" + }, + "devDependencies": { + "@rushstack/eslint-patch": "^1.7.2", + "@tsconfig/node18": "^18.2.2", + "@types/node": "^20.11.25", + "@types/webfontloader": "^1.6.38", + "@vitejs/plugin-vue": "^5.0.4", + "@vitejs/plugin-vue-jsx": "^3.1.0", + "@vue/eslint-config-prettier": "^9.0.0", + "@vue/eslint-config-typescript": "^13.0.0", + "@vue/tsconfig": "^0.5.1", + "eslint": "^8.57.0", + "eslint-plugin-vue": "^9.22.0", + "npm-run-all2": "^6.1.2", + "prettier": "^3.2.5", + "raw-loader": "^4.0.2", + "sass": "^1.71.1", + "typescript": "~5.4.2", + "vite": "^5.1.6", + "vite-plugin-node-polyfills": "^0.21.0", + "vue-cli-plugin-vuetify": "~2.5.8", + "vue-tsc": "^2.0.6", + "webpack-plugin-vuetify": "^3.0.3" + } +} diff --git a/public/CNAME b/public/CNAME new file mode 100644 index 00000000..f0c1b74e --- /dev/null +++ b/public/CNAME @@ -0,0 +1 @@ +atlas.mitre.org diff --git a/public/README.md b/public/README.md new file mode 100644 index 00000000..93a5ad33 --- /dev/null +++ b/public/README.md @@ -0,0 +1,7 @@ +# ATLAS + +MITRE ATLAS (Adversarial Threat Landscape for Artificial-Intelligence Systems), is a knowledge base of adversary tactics, techniques, and case studies for machine learning (ML) systems based on real-world observations, demonstrations from ML red teams and security groups, and the state of the possible from academic research. + +ATLAS is modeled after the MITRE ATT&CK® framework and its tactics and techniques are complementary to those in ATT&CK. Machine learning is increasingly used across a variety of industries and there are a growing number of vulnerabilities. We developed ATLAS to raise awareness of these threats and present them in a way familiar to security researchers. + +Visit the ATLAS website at https://atlas.mitre.org! diff --git a/public/atlas-data b/public/atlas-data new file mode 160000 index 00000000..7ad95c0b --- /dev/null +++ b/public/atlas-data @@ -0,0 +1 @@ +Subproject commit 7ad95c0b1bdeeae5c83e23c9f093cdd8fdb703ab diff --git a/public/atlas.ico b/public/atlas.ico new file mode 100644 index 00000000..3340ec6d Binary files /dev/null and b/public/atlas.ico differ diff --git a/public/content/ai-security-101.md b/public/content/ai-security-101.md new file mode 100644 index 00000000..f78af984 --- /dev/null +++ b/public/content/ai-security-101.md @@ -0,0 +1,128 @@ +--- +title: AI Security 101 +--- + +[[toc]] + +#### What is AI Security? + +Artificial intelligence (AI) technology is advancing at a rapid rate and adoption is on the rise. Once limited only to highly controlled operational environments and use cases, today we see _AI-enabled systems_ — software systems with one or more AI components — effectively integrated into a variety of use cases and available to the public. + +_AI security_ can be defined as the tools, strategies, and processes implemented that identify and prevent threats and attacks that could compromise the confidentiality, integrity, or availability of an AI model or AI-enabled system. AI security is a critical component of the AI development cycle to ensure safe and consistent performance throughout operation. In additional to the existence of traditional cybersecurity vulnerabilities, incorporating AI into systems also introduces new threat vectors and vulnerabilities that require a new set of security procedures. Identifying and mitigating these AI-enabled system vulnerabilities is an integral part of AI security and requires a technical and operational response. + +In this 101, we describe common threats to AI-enabled systems documented within MITRE ATLAS™, security and the AI lifecycle, and active research areas. + +#### What are attacks on AI? + +Incorporating AI into a larger system can make the system susceptible to novel attacks that specifically target the AI. The techniques that adversaries use to carry out these attacks are distinct from traditional cyber techniques. By improving their understanding of these adversarial techniques, teams can work to mitigate the risks associated with AI incorporation. + +To better understand threats the wide range of effective attacks that can be used against to an AI-enabled system, we describe three important concepts that dictate an adversary’s path of attack: AI Access Time, AI Access Points, and System Knowledge. + +_AI Access Time_ can be broken into two stages, _training_ and _inference_. The training stage is a process that includes collecting and processing data, training a model, and validating the model’s performance. The end of the training stage and beginning of the inference stage occurs once a model is deployed. During the inference stage, users submit queries, and the model responds with predictions, classifications, or generative content known as the outputs (or inferences). + +_AI Access Points_ can either be _digital_ or _physical_. A common digital access point within an AI-enabled system is API (application programing interface) access, where an adversary can interact with the model by sending a query and observing the response. A physical access point is used when an adversary interacts with data in the real world and influences the model’s behavior by physically modifying the data collected. + +_System Knowledge_ refers to the amount of information an adversary knows about the ML components of the system. This knowledge can range from white-box, where adversaries have access to the model architecture, model weights and training data, to black-box where access and knowledge is limited to input and output responses during the inference stage (e.g. API access). + +The figure below depicts an example of an AI-enabled system containing a trained AI model and the different types of access time, access points and system knowledge an adversary could leverage. + +

+

+
+ AI-enabled system +
+
+ Figure 1: An AI-enabled system and key concepts. +
+
+

+ +The table below provides high-level descriptions of adversarial attacks and their possible effects on AI-enabled systems. +For a comprehensive list we recommend exploring the [ATLAS matrix](/matrices/ATLAS). + +| Attack | Overview | +| :--- | :--- | +| Poisoning Attack | Attacker modifies the training data of an AI system to get a desired outcome at inference time. With influence over training data, an attacker can create backdoors in the model where an input with the specified trigger will result in a particular output. | +| Evasion Attack | Attacker elicits an incorrect response from a model by crafting adversarial inputs. Typically, these inputs are designed to be indistinguishable from normal data. These attacks can be targeted, where the attacker tries to produce a specific classification, or untargeted, where they attempt to produce any incorrect classification. | +| Functional Extraction | Attacker recovers a functionally equivalent model by iteratively querying the model. This allows an attacker to examine the offline copy of the model before further attacking the online model. | +| Inversion Attack | Attacker recovers sensitive information about the training data. This can include full reconstructions of the data, or attributes or properties of the data. This can be a successful attack on its own or can be used to perform other attacks such as Model Evasion. | +| Prompt Injection Attack | Attacker crafts malicious prompts as inputs to a large language model (LLM) that cause the LLM to act in unintended ways. These "prompt injections" are often designed to cause the model to ignore aspects of its original instructions and follow the adversary's instructions instead. | +| Traditional Cyber Attack | Attacker uses well-established Tactics, Techniques, and Procedures (TTPs) from the cyber domain to attain their goal. These attacks may target model artifacts, API keys, data servers, or other foundational aspects of AI compute infrastructure distinct from the model itself. | + + +#### How does security fit into AI model lifecycles? + +An important consideration to countering attacks on AI-enabled systems is establishing clear operational procedures for managing a model throughout its lifecycle. Developing and deploying a robust AI model involves multiple phases of effort that typically involve different teams, developers, and stakeholders. Just as with the Software Development and Operations (DevOps) methodology, the field of Machine Learning Operations (MLOps) defines best practices and tools for deploying reliable, reproducible, and adaptable models. A good example of a model development pipeline with a MLOps focus is [CRISP-ML(Q)](https://ml-ops.org/content/crisp-ml), the Cross-Industry Standard Process for the development of Machine Learning applications with Quality assurance. + +CRISP-ML(Q) defines six phases in the model lifecycle: + + 1. _Business and Data Understanding_ + 2. _Data Engineering (Data Preparation)_ + 3. _Machine Learning Model Engineering_ + 4. _Quality Assurance for Machine Learning Applications_ + 5. _Deployment_ + 6. _Monitoring and Maintenance_ + +
+
+ CRISP-ML(Q) Machine Learning Development Life Cycle Process Diagram +
+
+ Figure 2: "The Machine Learning Development Life Cycle Process" by visenger. CC BY 4.0. +
+
+ + +Each phase begins with defining the requirements and constraints of the task, then cycles through a process of risk identification, risk evaluation, and risk mitigation until requirements are met. Teams often revisit earlier phases and loop through the pipeline multiple times as stakeholders define new requirements and constraints. + +It is expected that during the _Monitoring and Maintenance_ phase that the process will return to earlier development phases in response to changing real-world conditions, such as concept drift, data drift, or malicious actions. + +In ATLAS, we tag [mitigations](/mitigations) with phases from the CRISP-ML(Q) lifecycle to help each phase’s teams identify vulnerabilities that could impact their task requirements and possible ways to respond. We also encourage interested parties to read [the original paper on CRISP-ML(Q)](https://arxiv.org/pdf/2003.05155.pdf) + + +#### Recent AI Security Topics + +AI Security is a constantly evolving field with subfields emerging as the technologies mature. We describe recent developments in three notable sub-fields below: + +##### LLM Security +Large Language Models (LLMs) are a particular category of natural language models trained on hundreds of billions of words that can generate text or images and videos in response to natural language prompts. They vaulted to public popularity with the release of OpenAI’s ChatGPT in November of 2022 due to their ability to perform multiple complex tasks such as content generation, style transfer, and text summarization, all with a single model. + +From a security perspective, these systems introduce unique challenges to an AI pipeline due to the massive size of the training dataset, opaque internal architecture of the model, and use of natural language for input prompting. For example, [indirect prompt injection attacks](/techniques/AML.T0051.001) can be used to [extract a user’s personally identifiable information (PII)](/studies/AML.CS0021) or [influence the user to visit malicious websites](/studies/AML.CS0020). For sample adversarial techniques, see [LLM Prompt Injection](/techniques/AML.T0051), [Compromise LLM Plugins](/techniques/AML.T0053), and [LLM Jailbreak](/techniques/AML.T0054). + +We [updated ATLAS in Fall 2023](https://www.mitre.org/news-insights/news-release/mitre-and-microsoft-collaborate-address-generative-ai-security-risks) to incorporate a new LLM focus that includes real-world case studies of adversarial attacks. In addition to this ATLAS work, we recommend [this external list](https://llmsecurity.net/) of LLM security related papers, articles, and tools for those interested in learning more. + + +##### Hardware Security + +Hardware security has been studied extensively in classical cybersecurity settings and is now being examined in relation to AI systems. Example hardware security attacks include: + +1. Side channel attacks — information about the system is deduced from alternative information streams such as voltage measurements or response timing, +2. Fault injection attacks — systems are actively disrupted by faulty input data or physical environment disruptions, and +3. Hardware Trojan attacks — malicious backdoors are inserted into the hardware of the systems including GPUs and other platform circuitry. + +We refer interested readers to the following survey papers on this topic: +- [Zhou et al. (2021): Deep Neural Network Security From a Hardware Perspective](https://ieeexplore.ieee.org/abstract/document/9642246) +- [Xu et al. (2021): Security of Neural Networks from Hardware Perspective: A Survey and Beyond.](https://ieeexplore.ieee.org/document/9371637) + +##### Policy + +As the significance of vulnerabilities in AI-enabled systems becomes more widely known, policy makers and political leaders have been exploring the best way to balance interests of privacy and innovation. In the United States, the [Executive Order 14110](https://www.whitehouse.gov/briefing-room/presidential-actions/2023/10/30/executive-order-on-the-safe-secure-and-trustworthy-development-and-use-of-artificial-intelligence/) recently directed over 50 federal entities to take action across a range of AI policy areas. Several federal agencies have also enacted guidance on AI in recent years (e.g., [GSA AI Guide for Government](https://coe.gsa.gov/coe/ai-guide-for-government/print-all/index.html), [DoD Responsible AI Strategy](https://www.defense.gov/News/Releases/Release/Article/3588743/cdao-releases-responsible-ai-rai-toolkit-for-ensuring-alignment-with-rai-best-p/)), but legislation over academic and private sector bodies remains a complex issue with technological, economic, and ethical considerations. The most effective way to balance these factors is an open research question. + +We list a few leading relevant publications on this topic below: + +- [AI Risk Management Framework](tps://www.nist.gov/itl/ai-risk-management-framework), NIST +- [Guidelines for Secure AI System Development](https://www.ncsc.gov.uk/files/Guidelines-for-secure-AI-system-development.pdf), UK National Cyber Security Centre +- [A Unified Framework of Five Principles for AI in Society](https://hdsr.mitpress.mit.edu/pub/l0jsh9d1/release/8), Harvard Data Science Review +- [A Taxonomy of Trustworthiness for Artificial Intelligence, UC Berkeley Center for Long-Term Cybersecurity](https://cltc.berkeley.edu/publication/a-taxonomy-of-trustworthiness-for-artificial-intelligence/) +- [Ethics and Governance of Artificial Intelligence for Health](https://www.who.int/publications/i/item/9789240029200), World Health Organization +- [A Sensible Regulatory Framework for AI Security](https://www.mitre.org/news-insights/publication/sensible-regulatory-framework-ai-security), MITRE +- [Strengthening and Democratizing the US Artificial Intelligence Innovation Ecosystem: An Implementation Plan for a National Artificial Intelligence Research Resource](https://resourcecenter.cis.ieee.org/government/usa/cisgovph0020), National Artificial Intelligence Research Resource Task Force +- [Artificial Intelligence Bill of Rights](https://hai.stanford.edu/white-paper-stanford-hai-artificial-intelligence-bill-rights), Stanford University Human-Centered Artificial Intelligence +- [S.3572 Algorithmic Accountability Act of 2022](https://www.congress.gov/bill/117th-congress/senate-bill/3572), 117th United States Congress +- [EU Artificial Intelligence Act](https://www.europarl.europa.eu/news/en/headlines/society/20230601STO93804/eu-ai-act-first-regulation-on-artificial-intelligence), European Parliament + +#### Other recommended reading + +- Our [Tactics](/tactics) and [Techniques](/techniques) pages list the methodologies adversaries use to infiltrate and/or compromise vulnerable AI systems. Our [Matrix](/matrices/ATLAS) organizes these potential vulnerabilities graphically and chronologically for easier visual understanding, and our [Mitigations](/mitigations) page contains information how to protect your systems against them. +- For examples of what these system attacks look like “in the wild”, check out our growing list of [Case Studies](/studies). We also have a publicly available [database of vulnerabilities found in common models](https://airisk.io). +- Have suggestions on how we can make ATLAS more relevant to you and your organization? [Contact us via Slack, LinkedIn, Email, or Github](/resources/contact). We also welcome case study contributions through our interactive [Case Study Builder tool](/studies/create). diff --git a/public/content/aisec101/ai-enabled-system.png b/public/content/aisec101/ai-enabled-system.png new file mode 100644 index 00000000..f7e9e484 Binary files /dev/null and b/public/content/aisec101/ai-enabled-system.png differ diff --git a/public/content/aisec101/crisp-ml-process.jpg b/public/content/aisec101/crisp-ml-process.jpg new file mode 100644 index 00000000..1b5a1907 Binary files /dev/null and b/public/content/aisec101/crisp-ml-process.jpg differ diff --git a/public/content/case-study-legend.yaml b/public/content/case-study-legend.yaml new file mode 100644 index 00000000..4016a986 --- /dev/null +++ b/public/content/case-study-legend.yaml @@ -0,0 +1,59 @@ +legend: + actor: + icon: mdi-arrow-projectile + name: Actor + description: | + The individual or group that performed this operation + + case_study_type: + icon: mdi-folder-search + name: Case Study Type + description: | + Whether this case study describes a real-world incident or a demonstration under a realistic threat model and representative Target system + options: + exercise: + icon: mdi-clipboard-file-outline + name: Exercise + description: | + Operation performed by a red team to identify vulnerabilities + incident: + icon: mdi-alert-octagon-outline + name: Incident + description: | + Real world event + + incident_date: + icon: mdi-calendar + name: Incident Date + description: | + Time period of when the event/incident occured + + procedure: + icon: mdi-format-list-numbered + name: Procedure + description: | + Steps representing the timeline of the event, mapped to techniques + + reporter: + icon: mdi-bullhorn-outline + name: Reporter + description: | + The group that identified and reported this incident + + summary: + icon: mdi-text + name: Summary + description: | + Description of the event + + target: + icon: mdi-target-account + name: Target + description: | + The victim system or organization targeted by the Actor + + name: + icon: mdi-tag-outline + name: Name + description: | + Name for this case study diff --git a/public/content/contributorslist.yaml b/public/content/contributorslist.yaml new file mode 100644 index 00000000..aedb4418 --- /dev/null +++ b/public/content/contributorslist.yaml @@ -0,0 +1,197 @@ +--- +data: + - + organization: MITRE + contributors: + - Mikel Rodriguez + - Christina Liaghati + - Keith Manville + - Michael Krumdick + - Josh Harguess + - Virginia Adams + - Shiri Bendelac + - Henry Conklin + - Poomathi Duraisamy + - David Giangrave + - Emily Holt + - Kyle Jackson + - Nicole Lape + - Sara Leary + - Eliza Mace + - Christopher Mobley + - Savanna Smith + - James Tanis + - Michael Threet + - David Willmes + - Lily Wong + - Mouaz Alhindi + - Marissa Dotter + - Colin Busho + - Shane Shroeder + - Andy Applebaum + - Jonathan Broadbent + - Isabel Tuson + - Anna Snarski + - Danny Nsouli + - Angela Tong + - Amanda Vu + - Kate Hanson + + - + organization: Microsoft + contributors: + - Ram Shankar + - Siva Kumar + - Hyrum Anderson + - Suzy Schapperle + - Blake Strom + - Madeline Carmichael + - Matt Swann + - Mark Russinovich + - Nick Beede + - Kathy Vu + - Andi Comissioneru + - Sharon Xia + - Mario Goertzel + - Jeffrey Snover + - Derek Adam + - Deepak Manohar + - Bhairav Mehta + - Peter Waxman + - Abhishek Gupta + - Ann Johnson + - Andrew Paverd + - Pete Bryan + - Roberto Rodriguez + - Will Pearce + + - + organization: Bosch + contributors: + - Manojkumar Parmar + - Duplys Paul + - Jorge Guajardo Merchan + - Amit Phadke + - Adit Shah + - Tanya Motwani + - Pankaj Maurya + + - + organization: IBM + contributors: + - Pin-Yu Chen + + - + organization: NVIDIA + contributors: + - David Reber Jr. + - Keith Kozo + - Christopher Cottrell + - Daniel Rohrer + + - + organization: Airbus + contributors: + - Adam Wedgbury + + - + organization: PricewaterhouseCoopers + contributors: + - Michael Montecillo + + - + organization: Deep Instinct + contributors: + - Nadav Maman + - Shimon Noam Oren + - Ishai Rosenberg + + - + organization: Two Six Labs + contributors: + - David Slater + + - + organization: University of Toronto + contributors: + - Adelin Travers + - Jonas Guan + - Nicolas Papernot + + - + organization: Cardiff University + contributors: + - Pete Burnap + + - + organization: Software Engineering Institute/Carnegie Mellon University + contributors: + - Nathan M. VanHoudnos + + - + organization: Berryville Institute of Machine Learning + contributors: + - Gary McGraw + - Harold Figueroa + - Victor Shepardson + - Richie Bonett + + - + organization: Citadel AI + contributors: + - Kenny Song + + - + organization: McAfee + contributors: + - Christiaan Beek + + - + organization: Unaffiliated + contributors: + - Ken Luu + + - + organization: Ant Group + contributors: + - Henry Xuef + + - + organization: Palo Alto Networks + contributors: + - May Wang + - Stefan Achleitner + - Yu Fu + - Ajaya Neupane + - Lei Xu + + - + organization: University of Chinese Academy of Sciences + contributors: + - Neil Yale + - Ying Zonghao + + - + organization: Kaspersky + contributors: + - Alexey Antonov + - Alexey Kogtenkov + + - + organization: spiderSilk + contributors: + - Mossab Hussein + + - + organization: Silent Break Security + contributors: + - Will Pearce + - Nick Landers + + - + organization: Brown University + contributors: + - Vanya Cohen + - Aaron Gokaslan + - Ellie Pavlick + - Stefanie Tellex diff --git a/public/content/data-list-page-intros.yaml b/public/content/data-list-page-intros.yaml new file mode 100644 index 00000000..71ebe59c --- /dev/null +++ b/public/content/data-list-page-intros.yaml @@ -0,0 +1,17 @@ +tactics: | + Tactics are tactical adversary goals during an attack. They represent the “why” of a technique: the reason for performing an action. + Tactics serve as useful contextual categories for individual techniques and cover standard notations for things adversaries do during an operation. + [1] + + MITRE ATLAS tactics represent new adversary goals particular to artificial intelligence systems, as well as tactics adapted from the MITRE ATT&CK® Enterprise Matrix. + In those cases, ATT&CK tactic definitions are stretched to include ML concepts. +techniques: | + Techniques describe the means by which adversaries achieve tactical goals. They represent “how” an adversary achieves a tactical objective by performing an action. + For example, an adversary may gain initial access by compromising the machine learning (ML) supply chain. + + Techniques may also represent “what” an adversary gains by performing an action. This is a useful distinction for the ML Attack Staging tactic, + where the adversary is typically creating or modifying an ML artifact that will be used in a subsequent tactical objective. + There can be multiple techniques in each tactic category as there are many ways to achieve tactical objectives. + [1] +mitigations: | + Mitigations represent security concepts and classes of technologies that can be used to prevent a technique or sub-technique from being successfully executed. diff --git a/public/content/descriptions/ML-lifecycle.yaml b/public/content/descriptions/ML-lifecycle.yaml new file mode 100644 index 00000000..1299f6f7 --- /dev/null +++ b/public/content/descriptions/ML-lifecycle.yaml @@ -0,0 +1,15 @@ +ML-lifecycle: +- name: Business and Data Understanding + description: | + Defining the scope and requirements of the project and collecting data +- name: Data Preparation + description: | + Data cleaning, data augmentation, and developing a robust data pipeline +- name: ML Model Engineering + description: Defining quality measures, selecting a model architecture, and training a model +- name: ML Model Evaluation + description: Increasing model explainability and ensuring that the developed model complies with project needs and satisfies risk and safety constraints +- name: Deployment + description: Setting up production environment and productionizing the validated ML model +- name: Monitoring and Maintenance + description: Continually evaluating the deployed model to ensure it continues to fulfill quality assurance measures diff --git a/public/content/descriptions/categories.yaml b/public/content/descriptions/categories.yaml new file mode 100644 index 00000000..43f6975e --- /dev/null +++ b/public/content/descriptions/categories.yaml @@ -0,0 +1,7 @@ +categories: +- name: Technical - ML + description: Relating to ML-specific hardware, software, and technological systems implented to mitigate adversarial threats. +- name: Technical - Cyber + description: Relating to cyber-specific hardware, software, and technological systems implemented to mitigate adversarial threats. +- name: Policy + description: Relating to procedures and processes that govern how tools are used, maintained, and deployed diff --git a/public/content/events.yaml b/public/content/events.yaml new file mode 100644 index 00000000..0c98d24e --- /dev/null +++ b/public/content/events.yaml @@ -0,0 +1,204 @@ +data: + - name: RSA + date: 2021-05-17 + location: Virtual + description: | + MITRE and Microsoft facilitated the [ATT&CK® for Adversarial Machine Learning: Tacky or Tasty?](https://www.rsaconference.com/library/Presentation/USA/2021/attck-for-adversarial-machine-learning-tacky-or-tasty) session. + url: https://www.rsaconference.com/events/2021-usa + color: red + - name: WACV + date: 2022-01-04 + location: Waikoloa, HI + description: | + MITRE ATLAS hosted a booth at the Workshop on Applications of Computer Vision. + url: https://wacv2022.thecvf.com/ + color: blue + - name: NAML + date: 2022-03-22 + location: Virtual + description: ATLAS & AI security were presented at the Naval Applications of Machine Learning virtual conference in March! + url: https://sites.google.com/go.spawar.navy.mil/naml/agenda + color: cyan + - name: Purple Hats + date: 2022-04-21 + location: Virtual + description: We presented on ATLAS & AI security at ATTACK IQ's Purple Hats virtual conference in April + url: https://www.purplehats.org/2022 + color: deep-purple + - name: RSA + date: 2022-06-06 + location: San Francisco, CA + description: | + MITRE, Microsoft, Google, and Meta/Facebook talked about AI Red Teaming, Security, and ATLAS at the RSA conference in-person in San Francisco in June! + + Our ATLAS team was present at the MITRE booth all week. + url: https://www.rsaconference.com/usa + color: red + - name: ADSTAR + date: 2022-07-20 + location: Sydney, Australia / Virtual + description: | + The Australian Defence Science, Technology and Research Summit (ADSTAR) is taking place from July 20 - 22. + This conference brings together industry, academia, and government to collaborate and share defense-related research and innovation. + + The ATLAS team was present at the MITRE booth! + url: https://www.adstarsummit.com.au/event/3ea1388a-66ec-4605-b5a7-1c53931b9341/summary + color: orange + - name: MLMAC + date: 2022-08-12 + location: Virtual + description: | + The ML Model Attribution Challenge (MLMAC) is a four-week event from August 12th to September 9th (AoE). + + MLMAC challenges contestants to develop creative technical solutions for large language model attribution. This competition works toward AI assurance by developing forensic capabilities and establishing the difficulty of model attribution in natural language processing, and could contribute to the maturation of AI forensics as a subfield of AI security. + url: https://mlmac.io + color: deep-purple + - name: AIPR + date: 2022-10-11 + location: Washington, DC + description: | + IEEE International Conference on AI and Pattern Recognition (AIPR) - MITRE helped organize and participate in the 51st annual AIPR workshop to continue pioneering new topics in applied image and visual understanding including topics around assured AI, explainable AI, and secure intelligent systems. + url: https://sites.google.com/aipr-workshop.org/aipr + color: yellow-darken-1 + - name: CAMLIS + date: 2022-10-20 + location: Arlington, VA + description: | + Conference on Applied Machine Learning (CAMLIS) - MITRE participated in this single track conference with presentations, posters, and tutorials on ML techniques and information security problems + url: https://www.camlis.org/ + color: blue + - name: 15th ACM Workshop on Artificial Intelligence and Security (AISec) + date: 2022-11-11 + description: | + Launching the second round of the Machine Learning Model Attribution Challenge (MLMAC). + location: Los Angeles, CA / Virtual + url: https://aisec.cc/ + color: red + - name: AAAI Fall Symposium "The Role of AI in Responding to Climate Challenges" + date: 2022-11-17 + location: Arlington, VA + description: | + Join us from November 17-19 for an action-packed program including keynotes, expert panels, contributed talks, and participatory discussions on how to best move the field of AI & climate change forward. + url: https://aaai.org/Symposia/Fall/fss22.php + color: blue-grey + - name: WACV + date: 2023-01-04 + location: Waikoloa, HI + description: | + IEEE/CVF Winter Conference on Applications of Computer Vision (WACV) is the premier international computer vision event comprising the main conference and several co-located workshops and tutorials. With its high quality and low cost, it provides an exceptional value for students, academics and industry researchers. + url: https://wacv2023.thecvf.com/home + color: light-blue + - name: IEEE Conference on Secure and Trustworthy Machine Learning (SaTML) + date: 2023-02-08 + location: Raleigh, NC + description: | + This conference will expand on the theoretical and practical understandings of vulnerabilities inherent to ML systems, explore the robustness of ML algorithms and systems, and aid in developing a unified, coherent scientific community which aims to build trustworthy ML systems. Results from the first round of the Machine Learning Model Attribution Challenge (MLMAC) will be announced. + url: https://satml.org/ + color: orange + - name: Responsible AI in Military Global Summit + date: 2023-02-15 + location: The Hague, Netherlands + description: | + The government of the Netherlands is hosting the first global Summit on Responsible Artificial Intelligence in the Military Domain (REAIM) on February 15 and 16 2023. REAIM 2023 will be a platform for all stakeholders to discuss the key opportunities, challenges and risks associated with military applications of AI. The MITRE ATLAS team will be showcasing ATLAS as part of the REIAM Innovation Hub events as well as engaging with other stakeholders around the world. + url: https://www.government.nl/ministries/ministry-of-foreign-affairs/events/reaim + color: blue + - name: MITRE Cybersecurity Days 2023 + date: 2023-03-28 + location: Virtual + description: | + MITRE Cybersecurity Days is being held from March 28 to 30, 2023. This event showcases virtual technical presentations by MITRE cyber experts to discuss ways to address current and emerging technical cybersecurity trends and challenges, innovative approaches to meeting government needs and solving problems for a safer world, and future research directions. + url: \# + color: blue + - name: WiCyS Conference + date: 2023-03-16 + location: Denver, CO + description: | + The WiCyS conference is the premier event to RECRUIT, RETAIN and ADVANCE women in cybersecurity. WiCyS brings together women in cybersecurity from academia, research, government, and industry. MITRE women will be giving a presentation on "Introduction to AI Red Teaming" during the event, which runs from March 16 to 18, 2023. + url: https://www.wicys.org/events/wicys-2023/ + color: light-green + - name: RSA + date: 2023-04-24 + location: San Francisco, CA + description: > + Join MITRE ATLAS' Dr. Christina Liaghati at RSA at a panel session on "Hardening AI/ML Systems - The Next Frontier of Cybersecurity" on April 24th. + + + As industries increasingly depend on AI/ML-enabled systems, they also introduce new attack surfaces and vulnerabilities. Failure to adequately harden AI/ML to adversarial machine learning attacks will inevitably lead to disruptions and destruction to networks and cyber-physical infrastructure. This panel will explore the importance of integrating resilience and assurance into AI/ML capabilities. + url: https://www.rsaconference.com/usa/agenda/session/Hardening%20AIML%20Systems%20-%20The%20Next%20Frontier%20of%20Cybersecurity + color: red + - name: Days of Shecurity + date: 2023-05-19 + location: San Francisco, CA & Virtual + description: Days of Shecurity is a free-to-attend interactive conference for women in technology interested in cybersecurity. Join two of MITRE's AI researchers for their session "Introduction to AI Red Teaming" on May 19th in San Francisco. + url: https://www.dayofshecurity.com/may-2023 + color: purple + - name: AFCEA DC Tech Summit + date: 2023-04-11 + location: Washington, DC + description: > + Join MITRE ATLAS' Dr. Christina Liaghati at AFCEA DC for their annual event, which is expected + to convene 250-300 senior-level government and IT professionals (e.g. SES, Flag Officers, Directors, CIOs, C-level executives, Program and Project Managers). Dr. Liaghati will be speaking on the panel "The AI Advantage" with representatives from the U.S. Army and Department of Defense." + url: https://afceadc.swoogo.com/techsummit23 + color: green + - name: '"AI Risky Business: Hands-on AI Payload Analysis" @ Black Hat 2023' + date: 2023-08-09 + location: Las Vegas, NV & Virtual + description: > + From June 8-10, The Global Resilience Federation (GRF) Summit on AI Security & Trust will address concerns across sectors with content tailored for executives such as CIOs, CISOs and AI/ML experts to engage on effective approaches for managing security and trust in Artificial Intelligence and Machine Learning models. + url: https://www.grf.org/ai-security-2023 + color: indigo + - name: "FutureIT: AI, Data and Tech Leadership" + date: 2023-11-08 + location: New York, NY + description: Join the ATLAS team at FutureIT New York to talk about ATLAS and AI threat awareness. + url: https://events.ciofutureit.com/event/new-york/ + color: light-green + - name: HITCON 2023 + date: 2023-11-15 + location: Taipei, Taiwan + description: > + Hacks in Taiwan Conference (HITCON) is technology-orientated cybersecurity conference. + ATLAS will present on AI threat awareness. + url: https://cfp2023.hitcon.org/en/ + color: + + - name: "Advantage DoD 2024: Defense Data & AI Symposium" + date: 2024-02-20 + location: Washington, DC + description: > + Feb 20-22: This event, hosted by the Chief Digital and AI Office (CDAO) invites key data leaders and developers from government, industry, and academia to join together and discuss and build the future of cutting-edge data, analytics, and AI - guiding the enablement of the U.S. military's enduring decision advantage. + url: https://www.ncsi.com/event/cdao/ + color: indigo + - name: Days of Shecurity 2024 + date: 2024-04-25 + location: San Francisco, CA & Virtual + description: | + Day of Shecurity is a free-to-attend interactive one-day conference that originally launched in 2017 in San Francisco for women in technology interested in cybersecurity. Day of Shecurity launched in Boston in 2019 and held a virtual, location-agnostic conferences in 2021. The event is an effort by Secure Diversity, the Lookout Foundation, Day of Shecurity Core Team, and various organizations that believe that diversity & inclusion matter in our industry. + url: https://www.dayofshecurity.com/ + color: purple + - name: RSA Conference 2024 + date: 2024-05-06 + location: San Francisco, CA + # description: | + # May 6-9: In an ever-changing cybersecurity world, innovation and creativity are key. Join RSAC 2024 and discover The Art of Possible as we collectively create works that will change our perspective on what we can accomplish. Let's celebrate limitless opportunities, challenge the status quo, and explore new horizons together. + description: > + Join RSAC 2024 and celebrate limitless opportunities, challenge the status quo, and explore new horizons together. + url: https://www.rsaconference.com/usa + color: red + imageSrc: rsa.jpg + - name: Black Hat USA 2024 + date: 2024-08-03 + location: Las Vegas, NV + description: > + BlackHat is an internationally recognized cybersecurity event series providing the most technical and relevant information security research. + url: https://www.blackhat.com/ + color: grey + imageSrc: blackhat.jpg + - name: DEF CON 2024 + date: 2024-08-08 + location: Las Vegas, NV + description: > + DEF CON is a hacker convention which takes place immediately following Black Hat in Las Vegas every year. + url: https://defcon.org/ + color: blue + imageSrc: defcon.jpg \ No newline at end of file diff --git a/public/content/faq-files/case-study-terms.md b/public/content/faq-files/case-study-terms.md new file mode 100644 index 00000000..1613d20b --- /dev/null +++ b/public/content/faq-files/case-study-terms.md @@ -0,0 +1,24 @@ +--- +title: Case Study Terminology +weight: 2 +--- + +###### What is an incident date? + +The time frame as to when the incident or exercise discussed in the case study occurred. + +###### What is an actor? + +The group that performed this operation. This could be a threat group or bad actor responsible for the incident, the researchers, AI red team, or security group that performed the demonstration. + +###### What is a reporter? + +The group that identified and reported this incident or exercise. In the case of an exercise, this may be the Actor. + +###### What is a target? + +The victim system or organization targeted by the Actor. + +###### What is a case study type? + +Whether this case study describes a real-world incident or exercise under a realistic threat model and representative Target system. diff --git a/public/content/faq-files/contact.md b/public/content/faq-files/contact.md new file mode 100644 index 00000000..d9f18ec2 --- /dev/null +++ b/public/content/faq-files/contact.md @@ -0,0 +1,8 @@ +--- +title: Staying Informed +weight: 10 +--- + +###### How do I stay up to date with what's happening with ATLAS? + +Keep up to date using the resources in our [contact page](/resources/contact). \ No newline at end of file diff --git a/public/content/faq-files/general.md b/public/content/faq-files/general.md new file mode 100644 index 00000000..decc0061 --- /dev/null +++ b/public/content/faq-files/general.md @@ -0,0 +1,25 @@ +--- +title: General +weight: 1 +--- + +###### What is a tactic? + +Tactics are tactical adversary goals during an attack. They represent the “why” of a technique: the reason for performing an action. +Tactics serve as useful contextual categories for individual techniques and cover standard notations for things adversaries do during an operation. +[\[1\]][1] MITRE ATLAS tactics represent new adversary goals particular to artificial intelligence systems, as well as tactics adapted from the MITRE ATT&CK® Enterprise Matrix. +In those cases, ATT&CK tactic definitions are stretched to include ML concepts. + +###### What is a technique? + +Techniques describe the means by which adversaries achieve tactical goals. They represent "how" an adversary achieves a tactical objective by performing an action. +For example, an adversary may gain initial access by compromising the machine learning (ML) supply chain. Techniques may also represent “what” an adversary gains by performing an action. This is a useful distinction for the ML Attack Staging tactic, +where the adversary is typically creating or modifying an ML artifact that will be used in a subsequent tactical objective. +There can be multiple techniques in each tactic category as there are many ways to achieve tactical objectives.[\[1\]][1] + +###### What is the ATLAS Navigator? + +The MITRE ATLAS™ version of the ATT&CK Navigator displays ATLAS techniques and allows users to create and view complex visualizations. In addition to the matrix, the Navigator also shows a frequency heat map of techniques used in ATLAS case studies. + + + [1]: https://attack.mitre.org/docs/ATTACK_Design_and_Philosophy_March_2020.pdf "MITRE ATT&CK: Design and Philosophy" diff --git a/public/content/faq-files/mitigation-terms.md b/public/content/faq-files/mitigation-terms.md new file mode 100644 index 00000000..096d3c05 --- /dev/null +++ b/public/content/faq-files/mitigation-terms.md @@ -0,0 +1,17 @@ +--- +title: Mitigation Terminology +weight: 3 +--- + +###### What are the ML lifecycle stages? + +The machine learning lifecycle, adapted from [Crisp-ML(Q)](https://ml-ops.org/content/crisp-ml), consists of the following stages: + +| Name | Description | +|---|---| +| Business and Data Understanding | Defining the scope and requirements of the project and collecting data | +| Data Preparation | Data cleaning, data augmentation, and developing a robust data pipeline | +| ML Model Engineering | Defining quality measures, selecting a model architecture, and training a model | +| ML Model Evaluation | Increasing model explainability and ensuring that the developed model complies with project needs and satisfies risk and safety constraints | +| Deployment | Setting up production environment and productionizing the validated ML model | +| Monitoring and Maintenance | Continually evaluating the deployed model to ensure it continues to fulfill quality assurance measures | diff --git a/public/content/update-files/2021-06.md b/public/content/update-files/2021-06.md new file mode 100644 index 00000000..a69172f7 --- /dev/null +++ b/public/content/update-files/2021-06.md @@ -0,0 +1,12 @@ +#### June 2021 + +##### Website v2.0.0 - 2.1.3 + +Official launch of https://atlas.mitre.org, allowing users to browse the ATLAS matrix and initial set of case studies. + + + + +##### Data v2.0.0 + +This version of ATLAS data contains 16 tactics, 30 techniques, 27 sub-techniques, and 13 case studies. 14 of the tactics and several techniques used in case studies were imported from MITRE ATT&CK® Enterprise v9. diff --git a/public/content/update-files/2021-07.md b/public/content/update-files/2021-07.md new file mode 100644 index 00000000..1afe364a --- /dev/null +++ b/public/content/update-files/2021-07.md @@ -0,0 +1,10 @@ +#### July 2021 + + +##### Website v2.2.0 - 2.2.2 + +ATLAS Navigator layers are available for case studies, highlighting techniques used in each procedure. See the "ATLAS Navigator layer" button on the case study pages for to view and download the layer files. + +##### Data v2.0.1 + +This version of ATLAS data contains 16 tactics, 30 techniques, 27 sub-techniques, and 13 case studies. 14 of the tactics and several techniques used in case studies were imported from MITRE ATT&CK® Enterprise v9. diff --git a/public/content/update-files/2021-10.md b/public/content/update-files/2021-10.md new file mode 100644 index 00000000..9a136f8e --- /dev/null +++ b/public/content/update-files/2021-10.md @@ -0,0 +1,15 @@ +#### October 2021 + + +##### Website v2.3.0 - 2.3.2 + +Technique pages display examples of how techniques have been used in case studies, drawn from procedure steps. + + +##### Data v2.2.0 + +This version of ATLAS data contains 16 tactics, 30 techniques, 27 sub-techniques, and 15 case studies. 14 of the tactics and several techniques used in case studies were imported from MITRE ATT&CK® Enterprise v9. + +New case studies: +- [Backdoor Attack on Deep Learning Models in Mobile Apps](https://atlas.mitre.org/studies/AML.CS0013) +- [Confusing Antimalware Neural Networks](https://atlas.mitre.org/studies/AML.CS0014) diff --git a/public/content/update-files/2022-03.md b/public/content/update-files/2022-03.md new file mode 100644 index 00000000..eb85ab4a --- /dev/null +++ b/public/content/update-files/2022-03.md @@ -0,0 +1,35 @@ +#### March 2022 + + +##### Website v3.0.0 + +This website update adds new functionality in the form of the Case Study Builder. The builder can be used to craft submission files for new case studies with details and technique mappings. + +The [Case Study Builder](https://atlas.mitre.org/studies/create) can be found in the “Build Case Study” subsection located under the “Case Study” tab in the navigation menu. + + + + +###### How to Use the Case Study Builder: + +1. Fill out the form. +2. Download the generated case study .yaml file (and PowerPoint .pptx version if selected). +3. Email the case study file to atlas@mitre.org + +To view or edit an existing case study, click the "Load Case Study" button and upload the .yaml file. Make any necessary adjustments, then re-download the file. The ATLAS team will review the submission and follow up with feedback. + + +###### Case Study Considerations: + +1. The attack exploits one or more vulnerabilities that compromise the confidentiality, integrity, or availability of an AI system. +2. The attack is against a production/commercial AI system. This can be on MLaaS or AI systems embedded in clients/at the edge. +3. Ensure you have permission to share this information and/or publish this research. Please follow the proper channels before reporting a new attack and make sure you are practicing responsible disclosure. + +We are especially excited for new case-studies! We look forward to contributions from both industry and academic researchers. + + +##### Data v3.0.0 + +This version of ATLAS data contains 12 tactics, 36 techniques, 27 sub-techniques, and 15 case studies. + +Prior usage of MITRE ATT&CK® Enterprise tactics and techniques have been adapted into the ATLAS framework, with ATLAS IDs and updated machine learning-specific descriptions. diff --git a/public/content/update-files/2022-07.md b/public/content/update-files/2022-07.md new file mode 100644 index 00000000..dbef576a --- /dev/null +++ b/public/content/update-files/2022-07.md @@ -0,0 +1,35 @@ +#### July 2022 + + +##### Website v3.1.0 + +This website update adds new functionality to support display of multiple matrices and custom object types, as well as string properties in data objects. + +Usability improvements include wider availability of navigation breadcrumbs, matrix item hierarchies in side navigation bars, and data object hover previews, as well as better support for small screens. Additional updates for case study builder validation, upcoming events, and various fixes. + + +##### Data v3.1.0 - 4.0.0 + +This version of ATLAS data contains 1 matrix, 12 tactics, 36 techniques, 27 sub-techniques, and 15 case studies. + +New features include support for custom data object types and IDs, as well as multiple matrices. + +There is a new top level key in the output YAML for `matrices`, and the updated format is as follows: + ```yaml + id: ATLAS + name: Adversarial Threat Landscape for AI Systems + version: Version number for this data release + + matrices: List of matrix data + - id: ATLAS + name: ATLAS Machine Learning Threat Matrix + tactics: List of tactics objects + techniques: List of technique and subtechnique objects + + case-studies: List of case study objects + ``` + + +##### Navigator Data v1.1.0 + +Supports output of multiple matrices and collections for ATT&CK Workbench compatibility. diff --git a/public/content/update-files/2022-10.md b/public/content/update-files/2022-10.md new file mode 100644 index 00000000..bea27b02 --- /dev/null +++ b/public/content/update-files/2022-10.md @@ -0,0 +1,42 @@ +#### October 2022 + + +##### Website v3.2.0 + +This website update refreshes existing case studies and shows updated tactic and technique descriptions. + +New fields have been added to case studies: case study type, reporter, target, and actor. See the new [FAQ](/resources/faq) for definitions. Additional updates were also added for case study builder validation and various bug fixes. + + +##### Data v4.1.0 + +This version of ATLAS data contains 1 matrix, 12 tactics, 37 techniques, 27 sub-techniques, and 15 case studies. + +New technique: [System Misuse for External Effect](/techniques/AML.T0048) + +Updated descriptions and content for tactics, techniques, and case studies. + +The case study YAML format has been updated to support the new case study version, with the added fields: case study type, reporter, target, and actor. The update format is as follows: + + ```yaml + study: + name: Name + summary: Summary + incident-date: 2017-08-01 + incident-date-granularity: DATE + procedure: + - tactic: AML.TA0005 + technique: AML.T0011 + description: Description + reporter: Reporter + actor: Actor + target: Target + case-study-type: incident + references: [] + ``` + *Note that the reporter field is only required if the case study type is "incident", otherwise it can be omitted* + + +##### Navigator Data v1.2.0 + +Updated ATLAS STIX and Navigator layer files for the added technique and refreshed case studies in ATLAS Data v4.1.0. diff --git a/public/content/update-files/2023-01.md b/public/content/update-files/2023-01.md new file mode 100644 index 00000000..021417eb --- /dev/null +++ b/public/content/update-files/2023-01.md @@ -0,0 +1,21 @@ +#### January 2023 + + +##### Website v3.3.0 + +This website update indicates when ATLAS tactics and techniques have been adapted from ATT&CK, displaying a red `&` in the matrix and list views and linking to the ATT&CK website on individual tactic and technique pages. Additional updates for [upcoming events](/resources/contact) and various bug fixes. + + +##### Data v4.2.0 + +This version of ATLAS data contains 1 matrix, 12 tactics, 38 techniques, 27 sub-techniques, and 16 case studies. + +- New technique: [Data from Local System](/techniques/AML.T0037) +- New case study: [Compromised PyTorch Dependency Chain](/studies/AML.CS0015) + + +##### Navigator Data v1.3.0 + +The ATLAS STIX now also includes ATT&CK Enterprise v12 for comparison purposes. Any ATLAS techniques adapted from ATT&CK are additionally denoted with "(ATLAS)" to distinguish the names. + +Updated ATLAS STIX and Navigator layer files for the added technique and new case study in ATLAS Data v4.2.0. diff --git a/public/content/update-files/2023-02.md b/public/content/update-files/2023-02.md new file mode 100644 index 00000000..702528aa --- /dev/null +++ b/public/content/update-files/2023-02.md @@ -0,0 +1,21 @@ +#### February 2023 + + +##### Website v3.4.0 + +This website update displays the new case study and additional techniques. + + +##### Data v4.3.0 + +This version of ATLAS data contains 1 matrix, 12 tactics, 40 techniques, 27 sub-techniques, and 17 case studies. + +- New techniques + + [Exploit Public-Facing Application](/techniques/AML.T0049) + + [Command and Scripting Interpreter](/techniques/AML.T0050) +- New case study: [Achieving Code Execution in MathGPT via Prompt Injection](/studies/AML.CS0016) + + +##### Navigator Data v1.4.0 + +Updated ATLAS STIX and Navigator layer files for the added techniques and new case study in ATLAS Data v4.3.0. diff --git a/public/content/update-files/2023-04.md b/public/content/update-files/2023-04.md new file mode 100644 index 00000000..b4aadca6 --- /dev/null +++ b/public/content/update-files/2023-04.md @@ -0,0 +1,11 @@ +#### April 2023 + + +##### Website v3.5.0 + +This website update includes initial mitigations. + + +##### Data v4.4.0 + +This version of ATLAS data contains 1 matrix, 12 tactics, 40 techniques, 27 sub-techniques, 19 mitigations, and 17 case studies. diff --git a/public/content/update-files/2023-10.md b/public/content/update-files/2023-10.md new file mode 100644 index 00000000..1cf69872 --- /dev/null +++ b/public/content/update-files/2023-10.md @@ -0,0 +1,55 @@ +#### October 2023 + +New large language model (LLM) content and updated mitigations. + + +##### Website v3.6.0 + +This website update includes updated mitigations and new tactics, techniques, and case studies inspired by large language models (LLMs). + + +##### Data v4.5.0 + +This version of ATLAS data contains 1 matrix, 14 tactics, 46 techniques, 36 sub-techniques, 19 mitigations, and 22 case studies. + +###### Tactics and techniques +- Added new tactics + + [Privilege Escalation](https://atlas.mitre.org/tactics/AML.TA0012) + + [Credential Access](https://atlas.mitre.org/tactics/AML.TA0013) + +- Added new techniques + + [Develop Capabilities](https://atlas.mitre.org/techniques/AML.T0017) + + [Develop Capabilities: Adversarial ML Attacks](https://atlas.mitre.org/techniques/AML.T0017.000) + - Previously known as "Develop Adversarial ML Attack Capabilities" + + [LLM Prompt Injection](https://atlas.mitre.org/techniques/AML.T0051) + + [LLM Prompt Injection: Direct](https://atlas.mitre.org/techniques/AML.T0051.000) + + [LLM Prompt Injection: Indirect](https://atlas.mitre.org/techniques/AML.T0051.001) + + [Phishing](https://atlas.mitre.org/techniques/AML.T0052) + + [Phishing: Spearphishing via Social Engineering LLM](https://atlas.mitre.org/techniques/AML.T0052.000) + + [Compromise LLM Plugins](https://atlas.mitre.org/techniques/AML.T0053) + + [LLM Jailbreak](https://atlas.mitre.org/techniques/AML.T0054) + + [Unsecured Credentials](https://atlas.mitre.org/techniques/AML.T0055) + + [LLM Meta Prompt Extraction](https://atlas.mitre.org/techniques/AML.T0056) + + [LLM Data Leakage](https://atlas.mitre.org/techniques/AML.T0057) + + [External Harms](https://atlas.mitre.org/techniques/AML.T0048) + - Previously this technique ID was known as "System Misuse for External Effect" + + [External Harms: Financial Harm](https://atlas.mitre.org/techniques/AML.T0048.000) + + [External Harms: Reputational Harm](https://atlas.mitre.org/techniques/AML.T0048.001) + + [External Harms: Societal Harm](https://atlas.mitre.org/techniques/AML.T0048.002) + + [External Harms: User Harm](https://atlas.mitre.org/techniques/AML.T0048.003) + + [External Harms: ML Intellectual Property Theft](https://atlas.mitre.org/techniques/AML.T0048.004) + - Previously was a top-level technique "ML Intellectual Property Theft", note the ID change + +###### Case studies +- Added new case studies + + [Bypassing ID.me Identity Verification](https://atlas.mitre.org/studies/AML.CS0017) + + [Arbitrary Code Execution with Google Colab](https://atlas.mitre.org/studies/AML.CS0018) + + [PoisonGPT](https://atlas.mitre.org/studies/AML.CS0019) + + [Indirect Prompt Injection Threats: Bing Chat Data Pirate](https://atlas.mitre.org/studies/AML.CS0020) + + [ChatGPT Plugin Privacy Leak](https://atlas.mitre.org/studies/AML.CS0021) + +- Refreshed existing case studies with LLM techniques + + [Achieving Code Execution in MathGPT via Prompt Injection](https://atlas.mitre.org/studies/AML.CS0016) + +###### Mitigations +Added machine learning lifecycle stages and new categories to mitigations \ No newline at end of file diff --git a/public/content/update-files/2024-01.md b/public/content/update-files/2024-01.md new file mode 100644 index 00000000..d0fd3416 --- /dev/null +++ b/public/content/update-files/2024-01.md @@ -0,0 +1,22 @@ +#### January 2024 + + +##### Website v3.6.1 + +This website update includes a [new ATLAS fact sheet](https:/atlas.mitre.org/pdf-files/MITRE_ATLAS_Fact_Sheet.pdf), an updated events list and LinkedIn page, as well as mitigations updates below and updated STIX and Excel representations. + + +##### Data v4.5.1 + +This version of ATLAS data contains 1 matrix, 14 tactics, 46 techniques, 36 sub-techniques, 20 mitigations, and 22 case studies. + +###### Mitigations + +- Added new mitigation + + [Control Access to ML Models and Data in Production](https://atlas.mitre.org/mitigations/AML.M0019) +- Minor updates to mitigation descriptions and techniques used + + +##### Navigator Data v1.6.1 + +Updated ATLAS STIX with ATT&CK Enterprise v14.1. diff --git a/public/content/update-files/2024-03.md b/public/content/update-files/2024-03.md new file mode 100644 index 00000000..1df41d85 --- /dev/null +++ b/public/content/update-files/2024-03.md @@ -0,0 +1,14 @@ +#### March 2024 + + +##### Website v4.0.0 + +This website update contains a redesigned look and migrates the code base from Nuxt.js 2 to Vue 3. + + +##### Data v4.5.2 + +This version of ATLAS data contains 1 matrix, 14 tactics, 46 techniques, 36 sub-techniques, 20 mitigations, and 22 case studies. + +###### Techniques and Case Studies +- Minor fixes for typos diff --git a/public/excel-files/atlas-matrices.xlsx b/public/excel-files/atlas-matrices.xlsx new file mode 100644 index 00000000..9a622e27 Binary files /dev/null and b/public/excel-files/atlas-matrices.xlsx differ diff --git a/public/excel-files/atlas-mitigations.xlsx b/public/excel-files/atlas-mitigations.xlsx new file mode 100644 index 00000000..c0140c10 Binary files /dev/null and b/public/excel-files/atlas-mitigations.xlsx differ diff --git a/public/excel-files/atlas-tactics.xlsx b/public/excel-files/atlas-tactics.xlsx new file mode 100644 index 00000000..7839a153 Binary files /dev/null and b/public/excel-files/atlas-tactics.xlsx differ diff --git a/public/excel-files/atlas-techniques.xlsx b/public/excel-files/atlas-techniques.xlsx new file mode 100644 index 00000000..6a49662d Binary files /dev/null and b/public/excel-files/atlas-techniques.xlsx differ diff --git a/public/excel-files/atlas.xlsx b/public/excel-files/atlas.xlsx new file mode 100644 index 00000000..69b1b879 Binary files /dev/null and b/public/excel-files/atlas.xlsx differ diff --git a/public/pdf-files/MITRE_ATLAS_Fact_Sheet.pdf b/public/pdf-files/MITRE_ATLAS_Fact_Sheet.pdf new file mode 100644 index 00000000..9dc162d2 Binary files /dev/null and b/public/pdf-files/MITRE_ATLAS_Fact_Sheet.pdf differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 00000000..085a2660 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/assets/ATLAS_tm_black.png b/src/assets/ATLAS_tm_black.png new file mode 100644 index 00000000..676efa24 Binary files /dev/null and b/src/assets/ATLAS_tm_black.png differ diff --git a/src/assets/GettyImages-1178228880-small.jpg b/src/assets/GettyImages-1178228880-small.jpg new file mode 100644 index 00000000..56423d39 Binary files /dev/null and b/src/assets/GettyImages-1178228880-small.jpg differ diff --git a/src/assets/MITRE-brand_ATLAS_MITRE_tm_white.svg b/src/assets/MITRE-brand_ATLAS_MITRE_tm_white.svg new file mode 100644 index 00000000..38262d52 --- /dev/null +++ b/src/assets/MITRE-brand_ATLAS_MITRE_tm_white.svg @@ -0,0 +1 @@ +TM \ No newline at end of file diff --git a/src/assets/MITRE_Mission_Vertical_White.svg b/src/assets/MITRE_Mission_Vertical_White.svg new file mode 100644 index 00000000..798d15d3 --- /dev/null +++ b/src/assets/MITRE_Mission_Vertical_White.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/base64_atlas_logo.js b/src/assets/base64_atlas_logo.js new file mode 100644 index 00000000..b797eba1 --- /dev/null +++ b/src/assets/base64_atlas_logo.js @@ -0,0 +1,7 @@ +const MITRE_ATLAS_TM = 'image/png; base64, iVBORw0KGgoAAAANSUhEUgAACAIAAAEWCAYAAAD2RadYAAAMaWlDQ1BJQ0MgUHJvZmlsZQAASImVVwdYU8kWnluSkJDQAhGQEnpHepUSQosgIFWwEZJAQokxIajYUVHBtYsoVnRVRNG1ALKoiL0sir0vFhSUdVEXRVF5ExLQdV/53vm+ufPfM2f+UzKTOwOAZi9XIslFtQDIE+dL4yNCmGNT05ikdkAFCFAHBODI5ckkrLi4aABlsP+7vL8FbaFcd1Jw/XP8v4oOXyDjAYCMhziDL+PlQdwEAL6RJ5HmA0BU6C2m5ksUeC7EulIYIMRrFDhLiXcrcIYSNw7YJMazIb4KgBqVy5VmAaDxAOqZBbwsyKPxGWIXMV8kBkDTEeJAnpDLh1gRu2Ne3mQFLofYFtpLIIbxAJ+M7ziz/safMcTP5WYNYWVeA6IWKpJJcrnT/8/S/G/Jy5UP+rCGjSqURsYr8oc1vJMzOUqBqRB3iTNiYhW1hrhXxFfWHQCUIpRHJintUSOejA3rBxgQu/C5oVEQG0EcLs6NiVbpMzJF4RyI4WpBp4nyOYkQ60O8WCALS1DZbJVOjlf5QmszpWyWSn+eKx3wq/D1SJ6TxFLxvxUKOCp+TKNQmJgCMQViywJRcgzEGhA7y3ISolQ2IwuF7JhBG6k8XhG/JcTxAnFEiJIfK8iUhser7EvyZIP5YluFIk6MCh/MFyZGKuuDneZxB+KHuWBXBWJW0iCPQDY2ejAXviA0TJk71iEQJyWoeHol+SHxyrk4RZIbp7LHzQW5EQq9OcQesoIE1Vw8OR8uTiU/ninJj0tUxokXZnNHxSnjwVeAaMAGoYAJ5LBlgMkgG4hauuq64JtyJBxwgRRkAQFwUmkGZ6QMjIjhMwEUgj8gEgDZ0LyQgVEBKID6L0Na5dMJZA6MFgzMyAHPIc4DUSAXvssHZomHvCWDZ1Aj+od3Lmw8GG8ubIrxf68f1H7TsKAmWqWRD3pkag5aEsOIocRIYjjRDjfEA3F/PBo+g2Fzw31w38E8vtkTnhNaCU8INwlthLuTREXSH6IcDdogf7iqFhnf1wK3hpyeeAgeANkhM87ADYET7gH9sPAg6NkTatmquBVVYf7A/bcMvvs1VHZkFzJKHkYOJtv+OFPDXsNziEVR6+/ro4w1Y6je7KGRH/2zv6s+H/ZRP1pii7FD2DnsJHYBa8TqABM7gdVjl7FjCjy0up4NrK5Bb/ED8eRAHtE//HFVPhWVlLlUu3S6fFaO5Qum5Ss2HnuyZLpUlCXMZ7Lg10HA5Ih5zo5MNxc3VwAU3xrl39c7xsA3BGFc/KYreghAQGp/f3/jN1003L+HO+D27/qms6kGgHYcgPMLeXJpgVKHKx4E+C+hCXeaATABFsAW5uMGvIA/CAZhYBSIBYkgFUyEVRbCdS4FU8FMMA8Ug1KwAqwFG8AWsB3sBvvAQVAHGsFJcBZcAlfBTXAfrp528Ap0g/egD0EQEkJD6IgBYopYIQ6IG+KDBCJhSDQSj6Qi6UgWIkbkyExkPlKKrEI2INuQKuQX5ChyErmAtCJ3kcdIJ/IW+YRiKBXVRY1Ra3QE6oOy0Cg0EZ2AZqFT0EJ0AboMLUcr0b1oLXoSvYTeRNvQV2gPBjB1jIGZYU6YD8bGYrE0LBOTYrOxEqwMq8RqsAb4O1/H2rAu7CNOxOk4E3eCKzgST8J5+BR8Nr4U34Dvxmvx0/h1/DHejX8l0AhGBAeCH4FDGEvIIkwlFBPKCDsJRwhn4F5qJ7wnEokMog3RG+7FVGI2cQZxKXETcT+xidhKfErsIZFIBiQHUgAplsQl5ZOKSetJe0knSNdI7aReNXU1UzU3tXC1NDWxWpFamdoeteNq19ReqPWRtchWZD9yLJlPnk5eTt5BbiBfIbeT+yjaFBtKACWRkk2ZRymn1FDOUB5Q3qmrq5ur+6qPURepz1UvVz+gfl79sfpHqg7VnsqmjqfKqcuou6hN1LvUdzQazZoWTEuj5dOW0apop2iPaL0adA1nDY4GX2OORoVGrcY1jdeaZE0rTZbmRM1CzTLNQ5pXNLu0yFrWWmwtrtZsrQqto1q3tXq06dqu2rHaedpLtfdoX9Du0CHpWOuE6fB1Fuhs1zml85SO0S3obDqPPp++g36G3q5L1LXR5ehm65bq7tNt0e3W09Hz0EvWm6ZXoXdMr42BMawZHEYuYznjIOMW49Mw42GsYYJhS4bVDLs27IP+cP1gfYF+if5+/Zv6nwyYBmEGOQYrDeoMHhrihvaGYwynGm42PGPYNVx3uP9w3vCS4QeH3zNCjeyN4o1mGG03umzUY2xiHGEsMV5vfMq4y4RhEmySbbLG5LhJpyndNNBUZLrG9ITpS6Yek8XMZZYzTzO7zYzMIs3kZtvMWsz6zG3Mk8yLzPebP7SgWPhYZFqssWi26LY0tRxtOdOy2vKeFdnKx0potc7qnNUHaxvrFOtF1nXWHTb6NhybQptqmwe2NNsg2ym2lbY37Ih2PnY5dpvsrtqj9p72QvsK+ysOqIOXg8hhk0OrI8HR11HsWOl424nqxHIqcKp2euzMcI52LnKuc349wnJE2oiVI86N+Ori6ZLrssPlvquO6yjXItcG17du9m48twq3G+4093D3Oe717m88HDwEHps97njSPUd7LvJs9vzi5e0l9arx6vS29E733uh920fXJ85nqc95X4JviO8c30bfj35efvl+B/3+9Hfyz/Hf498x0makYOSOkU8DzAO4AdsC2gKZgemBWwPbgsyCuEGVQU+CLYL5wTuDX7DsWNmsvazXIS4h0pAjIR/YfuxZ7KZQLDQitCS0JUwnLClsQ9ijcPPwrPDq8O4Iz4gZEU2RhMioyJWRtznGHB6nitM9ynvUrFGno6hRCVEbop5E20dLoxtGo6NHjV49+kGMVYw4pi4WxHJiV8c+jLOJmxL36xjimLgxFWOex7vGz4w/l0BPmJSwJ+F9Ykji8sT7SbZJ8qTmZM3k8clVyR9SQlNWpbSNHTF21thLqYapotT6NFJactrOtJ5xYePWjmsf7zm+ePytCTYTpk24MNFwYu7EY5M0J3EnHUonpKek70n/zI3lVnJ7MjgZGzO6eWzeOt4rfjB/Db9TECBYJXiRGZC5KrMjKyBrdVanMEhYJuwSsUUbRG+yI7O3ZH/Iic3ZldOfm5K7P08tLz3vqFhHnCM+Pdlk8rTJrRIHSbGkbYrflLVTuqVR0p0yRDZBVp+vCw/1l+W28oXyxwWBBRUFvVOTpx6apj1NPO3ydPvpS6a/KAwv/HkGPoM3o3mm2cx5Mx/PYs3aNhuZnTG7eY7FnAVz2udGzN09jzIvZ95vRS5Fq4r+mp8yv2GB8YK5C54ujFhYXaxRLC2+vch/0ZbF+GLR4pYl7kvWL/lawi+5WOpSWlb6eSlv6cWfXH8q/6l/WeayluVeyzevIK4Qr7i1Mmjl7lXaqwpXPV09enXtGuaakjV/rZ209kKZR9mWdZR18nVt5dHl9est169Y/3mDcMPNipCK/RuNNi7Z+GETf9O1zcGba7YYbynd8mmraOudbRHbaiutK8u2E7cXbH++I3nHuZ99fq7aabizdOeXXeJdbbvjd5+u8q6q2mO0Z3k1Wi2v7tw7fu/VfaH76mucarbtZ+wvPQAOyA+8/CX9l1sHow42H/I5VHPY6vDGI/QjJbVI7fTa7jphXVt9an3r0VFHmxv8G4786vzrrkazxopjeseWH6ccX3C8/0ThiZ4mSVPXyayTT5snNd8/NfbUjdNjTreciTpz/mz42VPnWOdOnA8433jB78LRiz4X6y55Xaq97Hn5yG+evx1p8WqpveJ9pf6q79WG1pGtx68FXTt5PfT62RucG5duxtxsvZV0687t8bfb7vDvdNzNvfvmXsG9vvtzHxAelDzUelj2yOhR5e92v+9v82o79jj08eUnCU/uP+U9ffVM9uxz+4LntOdlL0xfVHW4dTR2hndefTnuZfsryau+ruI/tP/Y+Nr29eE/g/+83D22u/2N9E3/26XvDN7t+svjr+aeuJ5H7/Pe930o6TXo3f3R5+O5TymfXvRN/Uz6XP7F7kvD16ivD/rz+vslXCl34CiAwYZmZgLwdhc8J6QCQIf3Nso45V1wQBDl/XUAgf+ElffFAfECoAZ2imM8uwmAA7BZz4Xc8F1xhE8MBqi7+1BTiSzT3U3JRYU3IUJvf/87YwBIDQB8kfb3923q7/+yAwZ7F4CmKco7qEKI8M6wNVSB7q6eMBf8IMr76Xc5/tgDRQQe4Mf+X0f7kIggCczZAAAAimVYSWZNTQAqAAAACAAEARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAh2kABAAAAAEAAABOAAAAAAAAAJAAAAABAAAAkAAAAAEAA5KGAAcAAAASAAAAeKACAAQAAAABAAAIAqADAAQAAAABAAABFgAAAABBU0NJSQAAAFNjcmVlbnNob3SEHtFcAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB12lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4yNzg8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjA1MDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoAA+psAAAAHGlET1QAAAACAAAAAAAAAIsAAAAoAAAAiwAAAIsAAHZbk+Eh+gAAQABJREFUeAHsnQWYFMcWhQ/swuIaeEAgwQkkuAV3FofgrosGh+Du7u7uLsHdgksgIUEDhODuLPCmN4FhZXZHWqq6T3+Pb3q6q+49978T2LdzuircB9sBHiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAqYgEI5GAFP0kUWQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQQAABGgH4QSABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABEiABExGgEcBEzWQpJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEAjAD8DJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJGAiAjQCmKiZLIUESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAETGMEuP/kBS7+/cBUHc2QIgEiR/Q2VU0sxj0C/u/e4/ifN92bLOispAli4X+xowmqTj9Z56/dw6Pnr/RLqFEm7/DhkS1NIo+i/3P/Ka7deexRDE4mAS0JRPD2QpZUCT1Kwc+5R/ikmBw9sg/ixY6KONEjwyt8OCk0iyjy6q1HuP3wmYjSqMmEBNT4+92EWFiShgQWLF+Pp0+D/x0XIYI3/OpU0TAzQ5MACZAACZAACZAACZAACZAACViJgGmMAFPXH8PwpQdM1bsBDYugeuHvTFUTi3GPwNZjl9BizAb3Jgs6q2HJLOhWK5+g6vSTVX/oauz/9Zp+CTXKFC1yRJya3tyj6NM2HMewJfs9isHJJKAlgbgxouDwpMYepZi16QQGLdznUQxOloOAt1d4JIwbHYnjxUAS25/E8WIGnCvvlT/xYkZFOPoEHDaz37w9mLf1lMP7vEECahL4ImYU/DLRs7/f1dTDWOYn8L9vcuOt/7sQC31w8XCI13mRBEiABEiABEiABEiABEiABEiABFwlYBojQNuJm7Dh0J+u1i/0+AzJ/4dV/aoLrZHi9CHQeMQ67Dp1RZ9kOmX5Pl1iLOhWSads4qahEcDeGxoB7Cx4JiYBGgHE7IusqqJH8cG3SeMho20FKOVPJtuf+LaVBHj8S4BGAH4S9CRAI4CetJlLIUAjAD8HJEACJEACJEACJEACJEACJEACehAwjRHAt9N8XLpprq0BlA/A+kG1kParL/T4LDCHoASUZXHzt5mFd+8/CKrQPVkxo0bCsSlNLf80JI0A9s8PjQB2FjwTkwCNAGL2xUyqkthWDcj+TSJkT/Ol7fVLKNvoWPWgEcCqnTembhoBjOFu5aw0Ali5+6ydBEiABEiABEiABEiABEiABPQjYAojwMs3/sjkN8l0X5QqH4M6xTOid92C+n0imEk4ApPWHsWo5QeF06WGoF2j6iNJ/JhqhJI2Bo0A9tbRCGBnwTMxCdAIIGZfzKwqkW1rgfwZkyJ/hq+R+9skULZhscpBI4BVOi1GnTQCiNEHK6mgEcBK3WatJEACJEACJEACJEACJEACJGAcAVMYAU5fuoVKvZcaR1HDzMpT0wfGN0KkiN4aZmFoUQl8sC0CUKTjHFy7/VhUiR7pmtCmNEpkT+lRDNkn0whg7yCNAHYWPBOTAI0AYvbFKqoieHshz3dJUOb7NPDNkRKRTf6zIY0AVvlki1EnjQBi9MFKKmgEsFK3WSsJkAAJkAAJkAAJkAAJkAAJGEfAFEaAxTt/Rc9ZO42jqHHmkc19UT7PNxpnYXgRCfzy2w3UHrRSRGmqaGpRPgfaV8mlSixZg9AIYO8cjQB2FjwTkwCNAGL2xYqqokfxQfncaVCt0HdI+3U8UyKgEcCUbRW2KBoBhG2NaYXRCGDa1rIwEiABEiABEiABEiABEiABEhCKgCmMAL1m78SiHb8KBVZNMTnSfolF3SurGZKxJCHQYfIWrD1wXhK1rsssYFvueOZP5V2faKIZNALYm0kjgJ0Fz8QkQCOAmH2xuqrMqRKiTrEMKJkjFZRVA8xy0Ahglk7KUQeNAHL0yUwqaQQwUzdZCwmQAAmQAAmQAAmQAAmQAAmIS8AURoAqfZfh5IV/xKXsobJw4cJh6/C6SJYgloeROF0mAo+fv0aeVjPw6o2/TLJd0hovZlQcmujn0hyzDaYRwN5RGgHsLHgmJgEaAcTsC1X9S0D5N7VO8YyoWSQ9YkWLJD0WGgGkb6FUBdAIIFW7TCGWRgBTtJFFkAAJkAAJkAAJkAAJkAAJkIDwBKQ3Ary3baKeyW8yXrx+KzxsTwQ2KZMVnarn9SQE50pGYMG20+gzd7dkql2Xe3CCH+LHiur6RJPMoBHA3kgaAewseCYmARoBxOwLVQUmEMUnQsCWAY1KZUGCONEC35ToHY0AEjXLBFJpBDBBEyUrgUYAyRpGuSRAAiRAAiRAAiRAAiRAAiQgKQHpjQCX/3mI4j/NkxS/87KVX07tH9cI3l7hnZ/EkVITKNdjEX67elfqGpwRP71jORTKlMyZoaYcQyOAva00AthZ8ExMAjQCiNkXqgqZQMQIXgGGgOZlsyN+bPkMdzQChNxXXtWGAI0A2nBlVMcEaARwzIZ3SIAESIAESIAESIAESIAESIAE1CMgvRFg4y9/os2ETeoRETjSpLZlUDxbCoEVUppaBM5dvYPyPRarFU7oOO0q58KPFXIIrVFLcTQC2OnSCGBnwTMxCdAIIGZfqCp0ApFtKwTU982EpmWzIVrkiKEPFugujQACNcMCUmgEsECTBSuRRgDBGkI5JEACJEACJEACJEACJEACJGBSAtIbAUYsPYAp64+ZtD2ByyqYKSlmdCwf+CLfmZJAnzm7sGD7GVPWFrQo3+wpMbFN6aCXLfOeRgB7q2kEsLPgmZgEaAQQsy9U5RwB5YvOzjXyokKetAgXzrk5Ro6iEcBI+tbLTSOA9XpudMU0AhjdAeYnARIgARIgARIgARIgARIgAWsQkN4I0Gj4Wuw5fdUS3fIKHw67RzdAwrjRLVGvVYt89cYfuVvOwJMXry2BIHG8GAGfa0sUG0KRNALYodAIYGfBMzEJ0AggZl+oyjUCOdMmxiC/Ivj6f7Fcm6jzaBoBdAZu8XQ0Alj8A2BA+TQCGACdKUmABEiABEiABEiABEiABEjAggSkNwIoX5jeefTcMq1rU+l7tPohp2XqtWKhaw+cR4fJWyxTejjbY4lHJzdBrGiRLFPz54XSCGCnQSOAnQXPxCRAI4CYfaEq1wlEsW0X0KVmPtQonF7Y1QFoBHC9r5zhPgEaAdxnx5nuEaARwD1unEUCJEACJEACJEACJEACJEACJOAaAamNAPcev8D3P053rWLJR3/5RQzsGl0f4WVY01Vy1kbJrzVwJQ7/fsOo9Ibknd+tInKlS2JIbqOT0ghg7wCNAHYWPBOTAI0AYvaFqtwnUDhzMgxuXBTKZ1u0g0YA0Tpibj00Api7vyJWRyOAiF2hJhIgARIgARIgARIgARIgARIwHwGpjQD7zvyFBsPWmK8rYVQ0u1MF5MvwdRijeFtGAn/dfoSiHefhw4cPMsp3W3OXGvngVzqL2/NlnkgjgL17NALYWfBMTAI0AojZF6ryjEC8mFExvFlx5E3/lWeBVJ5NI4DKQBkuVAI0AoSKhzc1IEAjgAZQGZIESIAESIAESIAESIAESIAESCAYAamNAFb90qhkjlQY37pUsGbygvwERiw7iCnrjspfiIsVlMudBqNalHBxljmG0whg76NV/063E+CZ6ARoBBC9Q9TnLgFlpammZbOhbeVc8Aofzt0wqs6jEUBVnAwWBgEaAcIAxNuqE6ARQHWkDEgCJEACJEACJEACJEACJEACJBACAamNAO0mbsb6Q3+EUJa5L0Xw9sL+cQ2FXMbV3OS1re7du/fI13YW7jx8rm0iAaOnSBQHW4bVEVCZ9pJoBLAzphHAzoJnYhKgEUDMvlCVegS+T5cYY1uWFOJnTBoB1OsrI4VNgEaAsBlxhLoEaARQlyejkQAJkAAJkAAJkAAJkAAJkAAJhExAaiOAb6f5uHTzQciVmfyqlZdSN2trd568giYj15m1vFDrUp4+PDW9OSL7RAh1nBlv0ghg7yqNAHYWPBOTAI0AYvaFqtQlkDBudExqWxrpk/1P3cAuRqMRwEVgHO4RARoBPMLHyW4QoBHADWicQgIkQAIkQAIkQAIkQAIkQAIk4DIBaY0AL9/4I5PfJLx7b6291D92OHnC2LYnqOvCtpIrD5MQaDZ6A7Yfv2SSalwvY1nvqsiSKqHrEyWfQSOAvYE0AthZ8ExMAjQCiNkXqlKfQKSI3hjapBhKf59a/eBORqQRwElQHKYKARoBVMHIIC4QoBHABVgcSgIkQAIkQAIkQAIkQAIkQAIk4DYBaY0Apy/dRqXeS9wu3AwTF/esjOxpvjRDKZav4e7jF8jXeib8bdsDWPXoU68gahfLaLnyaQSwt5xGADsLnolJgEYAMftCVdoQCGdzm7avkgvNy2XXJkEYUWkECAMQb6tKgEYAVXEymBMEaARwAhKHkAAJkAAJkAAJkAAJkAAJkAAJeExAWiPAkp1n0WPWDo8ByBzgh7xpMbxZcZlLoPb/CPALUKBKgW8xuHFRy30maASwt5z/HdhZ8ExMAjQCiNkXqtKWQM0i6dG7XiEo2/joedAIoCdt5qIRgJ8BvQnQCKA3ceYjARIgARIgARIgARIgARIgAWsSkNYI0HvOLizcfsaaXfuvamU/9QPjGyFGFB9Lc5C9+A+23S2Kd5qHK/88lL0Uj/SnSxoP6wbU9CiGjJNpBLB3jUYAOwueiUmARgAx+0JV2hMolTMVRjb3RQRvL+2T/ZeBRgDdUDORjQCNAPwY6E2ARgC9iTMfCZAACZAACZAACZAACZAACViTgLRGgCp9l+HkhX+s2bXPqu5bvxBqFc3w2RWeykbg6B9/o0b/FbLJVl2v8uXCmRnNdf2SQfUi3AhII4AdGo0AdhY8E5MAjQBi9oWq9CFQJEtyjG9VChEj6GMGoBFAn74yy78EaATgJ0FvAjQC6E2c+UiABEiABEiABEiABEiABEjAmgSkNAK8tz1CnanxZLx49daaXfusaqs+Rf0ZAulPO03dilX7fpe+DjUKWDugBr5NGl+NUNLEoBHA3ioaAewseCYmARoBxOwLVelHQDEDTGhdShfTHo0A+vWVmbgiAD8D+hOgEUB/5sxIAiRAAiRAAiRAAiRAAiRAAlYkIKUR4MqtRyjWca4V+xVizWv618B3yaz15WmIICS8+PTFa+RuNRMvX9PUorRvsF9RVCn4rYSddF8yjQB2djQC2FnwTEwCNAKI2Req0peAsk3A6B9Lwit8OE0T0wigKV4GD0KAKwIEAcK3mhOgEUBzxExAAiRAAiRAAiRAAiRAAiRAAiRgIyClEeDnwxfQevzPbOB/BGoWSY9+DQqTh4QEFu/8FT1n7ZRQuTaSa9u2uehj2+7CSgeNAPZu0whgZ8EzMQnQCCBmX6hKfwJ1imdE77oFNU1MI4CmeBk8CAEaAYIA4VvNCdAIoDliJiABEiABEiABEiABEiABEiABErARkNIIMGLZQUxZd5QN/I9A9Cg+ODjBD5EjepOJZAQq9lqCM5dvS6ZaO7mZUyXE8t5VtUsgYGQaAexNoRHAzoJnYhKgEUDMvlCVMQQ618iLxqWzapacRgDN0DJwCARoBAgBCi9pSoBGAE3xMjgJkAAJkAAJkAAJkAAJkAAJkMB/BKQ0AjQavhZ7Tl9lEz8jMLRJMVTKn+6zKzwVncD5a/dQpttC0WXqqi+KTwScnN5c8+WGdS0qjGQ0AtgB0QhgZ8EzMQnQCCBmX6jKGALhw4XDuFYlUSJHKk0E0AigCVYGdUCARgAHYHhZMwI0AmiGloFJgARIgARIgARIgARIgARIgAQ+IyClESB3qxm48/D5Z2XwNGvqRFjaqwpBSESg//w9mLvllESK9ZG6eWgdpPwyjj7JBMhCI4C9CTQC2FnwTEwCNAKI2ReqMo5AZJuBb3GPyvguWXzVRdAIoDpSBgyFAI0AocDhLU0I0AigCVYGJQESIAESIAESIAESIAESIAESCEJAOiPA/ScvkLPF9CBl8K1CYMuwOkiRyDpfoMrc9Tdv30ExtDx69krmMjTRPqqFL8rl/kaT2CIGpRHA3hUaAewseCYmARoBxOwLVRlLIGHc6FjTvzqU/z7UPGgEUJMmY4VFgEaAsAjxvtoEaARQmyjjkQAJkAAJkAAJkAAJkAAJkAAJhERAOiPA/l+vQfnijEdwAg1LZkG3WvmC3+AV4QhsOPQn2k7cJJwuEQQ1KpUFXWta53NMI4D9U0cjgJ0Fz8QkQCOAmH2hKuMJ5Po2CeZ0/kHVrX1oBDC+r1ZSQCOAlbotRq00AojRB6ogARIgARIgARIgARIgARIgAbMTkM4IwC+KHH8k48SIjAPjGiGCt5fjQbwjBIF6Q1bjwNlrQmgRTcT36RJjQbdKosnSTA+NAHa0/PvdzoJnYhKgEUDMvlCVGARa/ZATbSp9r5oYGgFUQ8lAThCgEcAJSByiKgEaAVTFyWAkQAIkQAIkQAIkQAIkQAIkQAIOCEhnBGg/aTPWHfzDQTm8PK5VKZTKmYogBCZw4+4TFG4/B+8/fBBYpXHSYkaNhGNTmiJcOOM06JmZRgA7bRoB7Cx4JiYBGgHE7AtViUHAK3w4LOheCdnTfKmKIBoBVMHIIE4SoBHASVAcphoBGgFUQ8lAJEACJEACJEACJEACJEACJEACoRCQzghQovN8XPz7QSglWftW3vRfBSzNam0KYlc/ZsUhTFhzRGyRBqvbPboBEseLYbAKfdLTCGDnTCOAnQXPxCRAI4CYfaEqcQgo/3ZvHFwLUSNF9FgUjQAeI2QAFwjQCOACLA5VhQCNAKpgZBASIAESIAESIAESIAESIAESIIEwCEhlBHj1xh8Z/Sbh3Xs+Se2or+Ftj1HvHFXfMl+iOuIg6nXls1uw3Wz8c/+pqBKF0DWhTWmUyJ5SCC1ai6ARwE6YRgA7C56JSYBGADH7QlViEahZJD36NSjssSgaATxGyAAuEKARwAVYHKoKARoBVMHIICRAAiRAAiRAAiRAAiRAAiRAAmEQkMoIcPrSbVTqvSSMkni7ZYUcaFs5F0EISGDP6atoNHytgMrEktSifA60r2KNzzCNAPbPHo0AdhY8E5MAjQBi9oWqxCIQzmZKXdTD8y0CaAQQq69mV0MjgNk7LF59NAKI1xMqIgESIAESIAESIAESIAESIAEzEpDKCLBk51n0mLXDjH1QtaYEcaJhz5iGUPZq5SEWgZZjN2Lz0YtiiRJQTcFMSTGjY3kBlakviUYAO1MaAewseCYmARoBxOwLVYlHIHXiuFg/sCa8vMK7LY5GALfRcaIbBGgEcAMap3hEgEYAj/BxMgmQAAmQAAmQAAmQAAmQAAmQgJMEpDIC9JmzCwu2n3GyNGsPm96xHAplSmZtCIJV/+DJS+RpPRNv/d8Jpkw8OfFiRsWhiX7iCdNAEY0Adqg0AthZ8ExMAjQCiNkXqhKTQK+6BVG3eEa3xdEI4DY6TnSDAI0AbkDjFI8I0AjgET5OJgESIAESIAESIAESIAESIAEScJKAVEaAqn2X4cSFf5wszdrDimVLgclty1gbgmDVz9p0AoMW7hNMlbhyDk7wQ/xYUcUVqJIyGgHsIGkEsLPgmZgEaAQQsy9UJSaB2NEjY+fIeogexcctgTQCuIWNk9wkQCOAm+A4zW0CNAK4jY4TSYAESIAESIAESIAESIAESIAEXCAgjRHg/YcPyNR4Ml68eutCedYd6m1binXv2IaW+CJVli6X6DwfF/9+IItcw3UqWwMoWwSY/aARwN5hGgHsLHgmJgEaAcTsC1WJS6BlhRxoWzmXWwJpBHALGye5SYBGADfBcZrbBGgEcBsdJ5IACZAACZAACZAACZAACZAACbhAQBojwJVbj1Cs41wXSuPQjtXyoFnZbAQhAIGTtpUsqthWtODhPIF2ti8OfrR9gWD2g0YAe4dpBLCz4JmYBGgEELMvVCUuAWU1gD1jGiCGG6sC0Aggbl/NqIxGADN2VeyaaAQQuz9URwIkQAIkQAIkQAIkQAIkQAJmISCNEWDT4QtoNf5ns3DXpY6v/xcL20fUQ7hwuqRjklAIdJuxHct2nwtlBG8FJeCbPSUmtikd9LLp3tMIYG8pjQB2FjwTkwCNAGL2harEJtCham40L5fdZZE0AriMjBM8IEAjgAfwONUtAjQCuIWNk0iABEiABEiABEiABEiABEiABFwkII0RYOSyg5i87qiL5XH4gm6V8H26xARhIAFlO4vvW07nthYu9iBJvJjYNbq+i7PkG04jgL1nO05cxtoD5+0XTH6248QVvH7rL32V3yWLj6/ix5S+DmcKUJ5uHtioiDNDHY6ZtekEBi3c5/A+b5CA2QjEjx0Ve8c0hLJtlSuHmYwARbIkh08EL1fK51idCcSIGgkDGhbWOSvTWZkAjQBW7j5rJwESIAESIAESIAESIAESIAH9CEhjBPAbsRa7T13Vj4xJMpXLnQajWpQwSTVylrHcthJAV9uKADxcIxDOtpTFsSlNETOqj2sTJRtNI4BkDVNRbq4fZ+Du4+cqRjQmVH/bFyc1Cqc3JrmEWWkEkLBplOwxgfGtSqFkzlQuxTGTEeDgBD/EjxXVpfo5mARIwNwEaAQwd39ZHQmQAAmQAAmQAAmQAAm4S+DDhw949eo1Xr95i4gRvRHJxwfhw7v2cIW7uTnPnASkMQLkbjUDdx7K/4WJ3h8jnwjeODC+EWJFi6R3aub7j0CVvstw8sI/5OEGgfndKiJXuiRuzJRnCo0A8vRKbaU0AqhNVI54ZjICDG1SDGm/iicHeA9VKtssedmeaH/64jXuPX6Be09e4L7y+t+fm/ef4o/r9/HW/52Hmcw5PX+GrzGrUwWXiqMRwCVcHEwCJCAZARoBJGsY5ZIACZAACZAACZAACZCABwT8373DX9f+xp17D3DvwUPcu2/78+CR7VV5H/j1waPHePfu/adsygOT0aNFRexYMRAnVkzbq/Ln3/M4sWMiVswYSPi/eEiV/GskT5oEPhEjfprLExJQCEhhBLhv+2VrzhbT2TE3CfSsUwD1fDO5OZvTPCFw8e8HKNF5vichLD23a818aFQqi6kZ0Ahg6vaGWhyNAKHiMe1NMxkBlveuisypEpq2V64W9uqNP47/eROHzl3HQdufc1fv4N37D66GMeV4ZVsAxZgaN0YUp+ujEcBpVBxIAiQgIQEaASRsGiWTAAmQAAmQAAmQAAmQgBME3r9/j4tXruHEmd9w6tffcdL259ff/wx4yt+J6R4N8fb2QuoUyZAhXWpk+PYb25/USJ82dYCRwKPAnCw1ASmMAPvPXkP9IaulBm2k+DRJvsDGwbWMlGDZ3Mo+0MqXPjzcI2CFrS1oBHDvs2GGWTQCmKGLrtdAI4DrzGSdoawWsO7geSza8Suu3nokaxmq6XZ1GxEaAVRDz0AkQAICEqARQMCmUJJpCNy1PWHXvsdgaerp06klUiT7Sii9K9dvxZqfucWlUE3RWUyiBPExtHdHj7J26jMc/9y+61EMNSZ/+01KdGnTRI1QjGERAm26DcKDh3L8f/gB3dvi68SJLNIZscu8ZPvif/fBI9h78Bj2/XIMjx4/FUawsq1A+rSpUCBPDhTJnwu5smeCt5eXMPq0FnL4+Bl0GzBK6zT4PltGDOzeLiDP02fPUaHOj07l7Ne1NfLkcO5h2FZd+uO3Py6FGbdp/WqoWr7kp3FSGAGmbzyOoYv3fxLNE9cJrOxbDRlTJHB9Ime4TUBZHjhP65l48OSl2zGsPjFFojjYMqyOqTHQCGDq9oZaHI0AoeIx7U0aAUzbWoeFvbft7bb9+GUoP89aeauggpmSYkbH8g45Bb1BI0BQInxPAiRgJgI0Apipm6xFNAJL12xC8459RJPlUE/fzq3QqnFth/eNuDFk7DQMGz/TiNTMKQiB1CmS4pctSz1Sk9O3Gi5cuupRDDUmF8idHavnTVAjFGNYgMC1G/8gU8EK0lQ6pFcHNKlbVRq9ZhN69frfWLJqI1Zt2BawAoAs9X0RJzZKFy+ICqWKIE/OLKY3BWzddQDVG7fXvD1JvkyA03vWBuRRjCDJsxZ1KuePjWqhv80MENbx8uUrJMtSFG/evg1rKGpWKoMJQ3t+GieFEaD9pM22J6r++CSaJ64TqFrwOwzyK+L6RM5wm8DmIxfQctzPbs/nRNt+zOHD4dT05ojsE8G0OGgEMG1rwyyMRoAwEZlyAI0Apmyr00UdsK1yNWblL5Y0BESK6I2jU5oisu3VmYNGAGcocQwJkICsBGgEkLVz1C0DAb+2PQJ+IS+DVkVj/lzZsGb+RKHk0gggVDsMEUMjgCHYmVQAAjMXrsBPvYcLoMQ5CcUK5sbSGaOdG8xRqhDwf/cOm3fsw+xFq7Dn4FEo2wDIfMT7Ig4qly2OqhVKIeO3aWQuxaF20Y0Ayso1+zYsdKj/441d+w+jUv2wDQPKeCmNAMoe68pe6zzcJxA1UkQcmuCHKJHM+4Wq+3S0mdlw2BrsPfOXNsEtFHWZbQ/qLCbeg5pGAAt9mIOUSiNAECAWeUsjgEUaHUaZW45exNAl+3Ht9uMwRprr9rQO5VA4czKniqIRwClMHEQCJCApARoBJG0cZQtP4N2790id0xcPHz0RXutHgREjRMDFY1sRLWqUj5cMf6URwPAWGC6ARgDDW0ABBhFQnhpWvjSU5YgcORIuH9sGH5+IskiWVueDR48xb8kazFiwAjdv3ZG2jtCEK19I161WAVXKlUCsmNFDGyrVPdGNAOHChcP5XzYhXtzYoXLtPXQ8xk9fEOqYjzelMwK8euOPTI0nw9/2wzwPzwgM8iuKqgW/9SwIZztF4J/7T1Gw3Wy8e//BqfEc5JhAn3oFUbtYRscDJL9DI4DkDfRAPo0AHsCTeCqNABI3T2Xpr9++w4TVhwO2DLDKz7l1imdE77oFnSJJI4BTmDiIBEhAUgI0AkjaOMoWnoCyB2zJao2F1xlU4IIpw1GqaP6glw17TyOAYeiFSUwjgDCtoBAdCbx+/QbJsxWDsvy2TMeK2WNRON/3MkmWSquyXcSkWYswf/k66T4b7oJWDCbVKpRE03rVkCalcw9zuJtLj3miGwEUBtNH90cl28oMoR2FytfF6XPOrZwvnRHgzOXbqNhrSWj1856TBDKmSICVfas5OZrDPCEw3vaL/bG2pX95eE5AMa8oJhazHjQCmLWzYddFI0DYjMw4gkYAM3bVs5pOX7qFNhM24cZdeZ5cc7fiFIniYMuwOk5NpxHAKUwcRAIkICkBGgEkbRxlC09g4KgpGDlptvA6gwqsX+MHjOrfJehlw97TCGAYemES0wggTCsoREcCO/YeQpWGbXXMqE6q5g2qY2D3duoEY5RPBP66cROjbD9TLFn1M976+3+6bqUT5Ul138J50aFFA2TNKO8DxjIYAWpVKYvxg3s4/HgpK1KkzlHC6a0opDMCLN11Ft1n7nAIgDdcI7BxcC2kSfKFa5M42iUC7z98QOH2cyzxC32XwLg5OF3SeFg3oKabs8WfRiOA+D3SSiGNAFqRFTsujQBi98codY+evUKTketw4sI/RknQLe/B8X6IHztqmPloBAgTEQeQAAlITIBGAImbR+lCE3DlSSmRCknyZQKc3rNWGEk0AgjTCsOE0AhgGHomNpBAl34jMW3eMgMVuJc6ZfKvcWSrfLrdq1b7WfcePMSICbMwZ/FqvHn7VvuEkmQoUSQfenVsgW9SJZdEsV3m02fPcfX63/YLDs4atu6OS1euhXh3QLc2yJ8re4j3Pl6MEMH70woKjx4/RfKszj/cGtbPgus270T9ll0/pgrzVTojQJ85u7Bg+5kwC+MA5wjU882EnnUKODeYo9wisP/sNdQfstqtuZwUnEAEby+cmdEcyqsZDxoBzNhV52qiEcA5TmYbRSOA2TqqXj0vbdth+Q1fi8O/31AvqICRxvxYEmVypQ5TGY0AYSLiABIgAYkJ0AggcfMoXVgCt+/cQ7o8ZfDB9nCGjMehzUs+/fLYaP00AhjdAePz0whgfA+oQH8C2YpUwuW/5Pz/4yd3r8bXiRPpD81EGf3fvcPMBSswZOx0PH7y1ESVqVeKl1d4NKlbFV3bNkW0qFHUCyxIJGVFEGVlkJCOuROHoKxvoZBuhXjNVSOAEuTo9hVIkTRJiPE69BqK2YtWhXgvpIvSGQGq9VuO43/eDKkWXnODQKxokXDA9iSWTwRzfqnqBhLVp7SduAkbDv2pelwrB1RWBFBWBjDjQSOAGbvqXE00AjjHyWyjaAQwW0fVref5qzeoNXAlzl65o25ggaLVLpYRfeoVDFMRjQBhIuIAEiABiQnQCCBx8yhdWAILV2xAqy79hdUXlrD+XVvjx0a1whqmy30aAXTBLHQSGgGEbg/FaUBAeQo4e7EqGkTWJ+SIvp3QsFYlfZKZMMu58xcDfoY4dfa8CatTvyTl6fVJw3sjT44s6gc3MKLRRoDQ/jvOXrQyLl297jQdqYwAyhLrmRtPgfJLUR7qERjVogTK5U6jXkBG+kRAWdo3d6sZtmVj3n26xhPPCQz2K4oqBeXdhyY0AjQChEbH3PdoBDB3fx1VRyOAIzK8/pHA3ccvULn3Uvx978nHS6Z6/TZpfKwdUCPMmmgECBMRB5AACUhMgEYAiZtH6cISqN+qK9Zt2imsvrCEFcyTA6vmjg9rmC73aQTQBbPQSWgEELo9FKcBgcmzl6D7wNEaRNYnpLJs+6KpI/RJZqIsyipCU+YsQd9hE7kNgIt9DR8+PJrVr46eHZrDxyeii7PFHG60EUBZcUBZeSDocePmLWTIXz7o5VDfS2UEuHrrEYp2nBtqQbzpOoHv0yXGgm50iLlOLuwZc7ecQv/5e8IeyBEuEXD26UGXggoymEYAQRphgAwaAQyALkBKGgEEaIIEEn7/6y6q2lbFevnafPvReduWkjs1vTkiRfQOtRM0AoSKhzdJgAQkJ0AjgOQNpHzhCCjL+abK7iv1Ur4+ESPi4rGtiBolsuF8aQQwvAWGC6ARwPAWUIDOBCrVb41d+w/rnFW9dFGjRLH9G7IFyr8lPJwj8PLlK7To1A9rN+1wbgJHhUggXZqUmD66H9KmThHifZku6mUEyJIhHU6c+S0Ymlgxo+Pi0a1QTBafH45WvVL+rf77n9t4/uLl58MDzqUyAmw6fAGtxv8crAhe8IxAuHDhsH1EXXz9v1ieBeLsYATKdFuI89fuBbvOC54RyJIqIZb1rupZEEFn0wggaGN0kEUjgA6QBUxBI4CATRFU0vI959B1+nZB1Xkma2XfasiYIkGoQWgECBUPb5IACUhOgEYAyRtI+cIROHj0JMrUaCacLlcFLZo2AiUK53N1murjaQRQHal0AWkEkK5lFOwBgRcvXyJF1uJ4/UbuValXz5uAArmze0DCOlOV/dur+bXD0ZO/WqdoDSuNFMkHQ3t1QJ2qrj21rqEkt0LrZQRo3qA6ps9bDsXIGvTYsWo2MtuMAp8fTTv0xvK1mz+/FHDeqFZlLFm9UX4jwKjlhzBp7ZFgBfKC5wSalc2GjtXyeB6IET4ROHP5Nir2WvLpPU/UIxDFJwJO2p4e9AofTr2ggkSiEUCQRhggg0YAA6ALkJJGAAGaIJGElmM3YvPRixIpdk5q/4aFUaNw+lAH0wgQKh7eJAESkJwAjQCSN5DyhSPQd/hEjJ06TzhdrgpS9ndW9oc1+qARwOgOGJ+fRgDje0AF+hHYtGMfajXtqF9CjTK19KuFfl1aaxTdPGFv37mHyg3b4Nx58/2uxeguVf+hFEb17wLFGCDjoZcRoFOrRtix9xccP30uGKaeHVugXbN6ga5/k6sU7ty9H+ia8mb2+EFo2bm//EaAxiPWYdepK8EK5AXPCcSPFRX7xjaEl215Vh7qEOg5aycW76SLTB2awaNsGVYHKRLFCX5D8is0AkjeQA/k0wjgATyJp9IIIHHzDJB+7/EL+Haaj8fPXxmQXbuUtYtmQJ/6hUJNQCNAqHh4kwRIQHICNAJI3kDKF45AvjK1TPEL/a+TJMLJXasN50sjgOEtMFwAjQCGt4ACdCTQvucQzFls/N+9npb8TarkOLhpsadhTD3/+t+3UKHOj7hy7Yap6zSyuIzfpsGCKcPxZcL/GSnDrdx6GgFev3kbook1f65sWDN/4if95y9cRu6SNT69/3iirPr+x+FNyFzwB/mNAHlazcTth88+1sZXlQlMaVcWRbMmVzmqNcO9fOOPXD9Ox7OXci8hJHL3RrUogXK504gs0S1tNAK4hc0Uk2gEMEUbXS6CRgCXkVl+wtwtp9B//h5TcciR9kss6l451JpoBAgVD2+SAAlIToBGAMkbSPlCEbh56w7S5yuHDx8+CKXLXTGHtyxFKtuer0YeNAIYSV+M3DQCiNEHqtCHQIb85XHj5i19kmmc5dd966T8AlZjLAHhr934B2VrNYNiBuChLYH48eJi8dQRwZa41zar59H1NALkyJIBlRu0CSbaJ2JEXDmx/dOqClPnLkXX/qOCjfto/EmSoaDcRoAHT14iR4tpwQrkBfUIFM6cDNM6lFMvoIUjrdr3OzpN3WphAtqX3qhUFnStafxeeWpXSiOA2kTliUcjgDy9UlMpjQBq0rRGrLf+71Dsp3m4cfeJaQqOFzMqDk30C7UeGgFCxcObJEACkhOgEUDyBlK+UATmLV2Dtt0HC6XJEzEDu7eDsneskQeNAEbSFyM3jQBi9IEqtCfw+5+XkKdUTe0T6ZRhzMCuqFutgk7Z5EmjmAZL12iKv67flEe05EojR46EWWMHwrdwXmkq0dMI0KpxHSTLXAT+794F47NqzngUzJsj4LqybYmyfUnQo3GdKhjauyOkNwLsP3sN9YfIvyRL0AaJ9F7Zb33PmIZIECeaSLKk1FKj/woc/eNvKbXLIjrXt0kwv2tFWeQ6rZNGAKdRmW4gjQCma6lTBdEI4BQmDgpCYMG20+gzd3eQq3K/PT2jOaJGiuiwCBoBHKLhDRIgARMQoBHABE1kCcIQqNuiMzZs3S2MHk+FFMqbEyvnjPM0jEfzaQTwCJ8pJtMIYIo2sggnCIybNh99hk1wYqQcQ8oUL4h5k4bKIVYnlQ8ePUapak3w56WrOmVkmo8EvL29MHFYL1QpV+LjJaFf9TQCdGnTBMUrN8KxU2eDMWndpA76dGoZYBJIkbUYnj57HmzM3AlDULZEIfmNADM2nsCQxcGdDsEq5gWPCLSrnAs/VvjXXeJRIAtPvvzPw4D9e82yDJ2orYwZNRKOTWkK2/YnpjpoBDBVO10qhkYAl3CZZjCNAKZppa6FvHj1FrlazsDzV290zatlsvWDaiHtV184TEEjgEM0vEECJGACAjQCmKCJLEEIAm/evkXKbMXx7PkLIfSoISKST0RcOrYNypN0Rh00AhhFXpy8NAKI0wsq0ZZAuVotsP/wcW2T6Bg9erSouHhsKyJ4e+uYVdxUr1+/Qfk6P+LIiTPiijS5svDhw2PsoO6oVbmM8JXqbQToP2ISRk+ZG4xLhnRpsHvdvACTgGIWCHqEs31B9ueRzYgbO5b8RoAOk7dg7YHzQWvke5UJJIkXEztG1UN4s327qjKn0MINW7If0zaY5weG0Go1+t7u0Q2QOF4Mo2Womp9GAFVxShWMRgCp2qWaWBoBVENpuUBdp2/H8j3nTFP31PZlUSRLcof10AjgEA1vkAAJmIAAjQAmaCJLEILA3kPHUMH2C36zHUumj0LxQnkMK4tGAMPQC5OYRgBhWkEhGhJ48vQZUmX3xVt/fw2z6B96/aLJyJMji/6JBcuoPLTZpH0vrFzP7ZyNbo1iBpgyog8ql/M1Wkqo+fU2AuzafxiV6rcOpkn5ov/C0S2YvWgVBo6aEux+ujQpsH/jooDr0m8NULLLAly4cT9YkbygPoE5XX5A3u++Uj+wBSL6v3uPfK1n4e7j4MtzWKB83Uuc2KY0fLOn1D2vlglpBNCSrtixaQQQuz9aqaMRQCuy5o976LfrqDNolWkK7VOvIGoXy+iwHhoBHKLhDRIgARMQoBHABE1kCUIQ6DVkHCbMWCiEFjVF+NWujGF9flIzpEuxaARwCZcpB9MIYMq2sqggBNZt3on6LbsGuSr/2zZN66L3T+YzybnaGeXnA+XnBB5iEFBWqVg0bQSK5M8lhqAQVOhtBHjx8iWSZS4aohlp1riBmLVwpW3FkhPBlDatVw2De7YPuC61EeDVG39kajzZtgfC+2BF8oL6BErlTIVxrUqpH9gCEbcdv4TmozdYoFIxSmxRPgfaVxH3Hwt3KNEI4A41c8yhEcAcfXS1ChoBXCXG8R8JvHv/Ad//OB0Pn778eEnq17D+TacRQOr2UjwJkEAYBGgECAMQb5OAkwRylaiOPy5ecXK0PMOSfZUYx3euNEwwjQCGoRcmMY0AwrSCQjQk0KrLACxcsV7DDMaE/i5tKuxdv8CY5IJkPXz8DMrWagZ//3eCKKIMhUC0qFGwedkMKE+0i3jobQRQGPhW8cPRk78Gw1GlfAms27QTr98E3yJ03qShKFO8YMAcqY0Av165jR96LglWPC9oQyCCtxcOjGuEODEia5PAxFGbjFyHnSfN9386RW1ZwUxJMaNjeVHluaWLRgC3sJliEo0Apmijy0XQCOAyMk74jED7SZux7uAfn12R97Rqwe8wyK+IwwJoBHCIhjdIgARMQIBGABM0kSUYTuD637eQsYC5fj/wOdSj25YjRTJjVu+kEeDzTljznEYAa/bdSlUry8any1MGt+/cM13ZyrLi5w5sQIL4X5iuNmcKUrZ8yFemFpSfE3iIR+DrJImwY/UcxIkVUzhxRhgBBoycjFGT5zjNQvnv++LRrYgd69/ts6U2AizbfQ7dZmx3ungO9JxAt1r50LAk945xheSdh8+Rv+0srlzhCjQPx8aPFRUHJ/h5GEWs6TQCiNUPPdXQCKAnbXFy0QggTi9kVLJ011l0n7lDRunBNBfPlgKT2pYJdv3jBRoBPpLgKwmQgBkJ0Ahgxq6yJr0JKMulduw9TO+0uuVTlnxVln414qARwAjqYuWkEUCsflCN+gROn/sDhcrXVT+wIBHHD+6BWlXKCqJGXxltug3C/GVr9U3KbC4RKJQ3J5bNHAMvr/AuzdN6sBFGgN37j6Bi/VZOlxZ0xQ+pjQB95u7Ggm2nnS6eAz0nkCJRHGwZVsfzQBaKMHndUYxcdtBCFYtRqmIEUAwBZjloBDBLJ12vg0YA15mZYQaNAGboonE1/HH9Hkp3Ncc+uDnTJsbC7pUcwqQRwCEa3iABEjABARoBTNBElmA4gZpNO2Lzjn2G69BKgLKH7vJZY7QKH2pcGgFCxWOJmzQCWKLNli5yxMRZGDR6qmkZlC9ZBLPHDzJtfY4KO3j0JMrWbA5lxQceYhPo1KoRurRpIpRII4wAL1++QtLMRfDW398pFs0bVMfA7u0+jZXaCFCt33Ic//Pmp2J4og+Bpb2qIGvqRPokkzyL8m9J0Y5z8dftR5JXIp98ZWsAZYsAsxw0Apilk67XQSOA68zMMINGADN00bga3r17j/R+k/Dmrfz73H2bND7WDqjhECaNAA7R8AYJkIAJCNAIYIImsgRDCSj7pabIVhwvXrw0VIeWySNF8sHlY9ugvOp90AigN3Hx8tEIIF5PqEhdAiWqNsaRE2fUDSpQtFgxo+PPI1vg7eUlkCptpSi/LylUoS7O/n5B20Q6RVeWgFf65+wXxDrJUi1N+PDhsWrueOTPlU21mJ4GMsIIoGguWa0JDh937sH4BVOGo1TR/J9KldYI8N72DWvmxlPw/NWbT8XwRB8ClfKnw9AmxfRJJnmWw7/fQK2BKyWvQk757avkRovy2eUUH4JqGgFCgGKRSzQCWKTRQcqkESAIEL51mYBvp/m4dPOBy/NEm5AsYWxsG+54KUYaAUTrGPWQAAmoSYBGADVpMpYVCezafxiV6rc2fenLZo5G0QK5da+TRgDdkQuXkEYA4VpCQSoSePDoMdLkLAHli2MzHz8vmYbvs2U0c4mBalu8aiN+7NQv0DVR33h7eyH510mQNnWKgD9pUibFF3FjI2b06IgRPRpixoiG6NGiQvmyXDE/Pnz0BA8ePsb9h49s549x8co1nPntD/x67k9cvf63tCsgJIgfD/t/Xog4sWIK0SqjjAADR03ByEmzw2SgfB4uHt0Kxejz8ZDWCKA8YV2kw9yPdfBVRwJRfCLgwPhGiB5Ff7exjmWqkqrD5C1Ye+C8KrEYxDUCvtlTYmKb0q5NEng0jQACN0djaTQCaAxY0PA0AgjaGIlkNRi2BvvO/CWR4pClJoobHXvHNgz5pu0qjQAO0fAGCZCACQjQCGCCJrIEQwl0Hzgak2cvMVSDHsmb1K2KIb066JEqUA4aAQLhsOQbGgEs2XbLFL1i3RY0ad/L9PV2aNEA3ds3M32dSoGKqSNn8Sq4/NcNYeuNHSsGShcrgLK+hZE3ZxZEjhxJFa137z/Ezn2/YMOWXdi2+6BtBcm3qsTVK0i5koUxZ/xgvdKFmscoI8CeA0fwQ71WoWpTbmZIlwa7180LNE5aI8DmIxfQctzPgYrhG/0I9GtQGDWLpNcvoYSZnrx4jdwtZ+DVG+f27ZCwRKElJ4kXE7tG1xdaoyviaARwhZa5xtIIYK5+OlsNjQDOkuI4RwTMYkaMHysqDk7wc1QmjQAOyfAGCZCAGQjQCGCGLrIGIwnkKF4VFy/Lb4wMi2GKpElwdPuKsIapfp9GANWRSheQRgDpWkbBLhBo1qEPlq3d5MIMOYdm+u4b7FxjjQdu127agQatugnXKGV5f+VL/3rVf0Dp4gXgEzGiphrvPXiIxSs3Yu6S1UKbIoJCmD66PyqVLR70su7vjTICvHz5CsmyFA3TxNGiYU0M6NYmEBdpjQCjlh/CpLVHAhXDN/oR+C5ZfKzp73i/Vv2UiJtp4fYz6D1nl7gCTa5M+Qf02JSmiBnVHCtX0Ahg8g9sKOXRCBAKHBPfohHAxM3VqbRes3di0Y5fdcqmXZq4MaLg8KTGDhNwRQCHaHiDBEjABARoBDBBE1mCYQSuXLuBrIUrGZZf78THdqy0LR+cWNe0NALoilvIZDQCCNkWilKBwPv3723bApQMWGJdhXBCh1B+h37+0M+I90UcoXWqIc6VPdbVyOdMDN/CedG1bZOAp7idGa/mGOVz/vP2vRgzZS5OnPlNzdCaxPoiTmwc2rIEcWPH0iS+s0GNMgIo+kpVb4Jfjp0OVeqiaSNQonC+QGOkNQI0HrEOu05dCVQM3+hLYN2AmkiXNJ6+SSXKVr7HYpy7ekcixeaTOr9bReRKl8QUhdEIYIo2ulUEjQBuYZN+Eo0A0rfQ8AL6zN2NBdtC/z8Hhot0QgCNAE5A4hASIAHTEqARwLStZWE6EJg+fzk69x2hQyYxUgzt3RGN61TRVcxfN27i2o1/dM2pVrIjJ85A2WtXhKN5g+r4JlVyEaS4rCFmjOgoV6Kwy/M+n5DTtxouXLr6+SVDzgvkzo7V8yYYkptJxSNw7NRZFK/cSDxhGimaNLw3qv9QSqPoYoT99fc/UaBsHTHE2FQoX2qPG9I92Be2Rglcv3kXeg0dh7+u3zRKglN5a1YqgwlDezo1VqtBRhoBBo2eihETZzkszcsrPC4d24YY0aMFGiOtESBv65m49eBZoGL4Rl8CtYtmQJ/6hfRNKkm2367eRbkeiyRRa16ZXWvmQ6NSWUxRII0ApmijW0XQCOAWNukn0QggfQsNL0BZlUhZnUj2g1sDyN5B6icBEvCEAI0AntDjXKsTqNqoHbbvOWgZDMUK5sbSGaMtU6+nhW7asQ+1mnb0NIwq81fOGYdCeXOqEkvGIDQCyNg182sePGYahk+Yaf5C/6tQWW5dWXbdzMdPfYZj5gL9t9EJiWmalMkC/s3+KnHCkG4bdk1Zer7rgNGYt3SNYRrCSqysYPHzkmnImTVDWEM1u2+kEWDvoWOoUOdHh7U52upDSiPAw6cvkb35NIfF8oY+BGJE8cEB256tkSN665NQoixmeQpPIuQhSi2f5xuMbO4b4j3ZLtIIIFvH1NNLI4B6LGWKRCOATN0SU+uA+XswZ8spMcW5oOqLmFHwy0RuDeACMg4lARIwEQEaAUzUTJaiK4FXr14jebZiUF6tckSOHAmXbU+A+fhEtErJHtVJI4BH+FSdTCOAqjgZTCUCRX6oj5O//q5SNPHDxIkVE38c3gzlaWIzHq/fvEG63KXx8NETw8vLkiEdls8ai9ixYhiuxZGApWs2oV2PwcL+HKV82b191WyED2/M59VII4Dys23SzEXw5u3bENvX0q8W+nVpHeyelEaAA2evod6Q1cGK4QX9CQxvVhw/5E2rf2KBM7564488rWbi8fNXAqu0hrQUieJgyzBxlvzxhDqNAJ7Qk3sujQBy989d9TQCuEuO8z4S6G8zAsw1gRGAWwN87ChfSYAErEiARgArdp01q0FAWQlAWRHAaseK2WNRON/3VivbrXppBHALmyaTaATQBCuDekDg7r0HSGv70ljZP91Kx9YVM5Et03emLPnn7XtRu9lPhteWNnUKbFw8FbFiRjdcS1gCTp75DTVtzG7fuRfWUEPuTxnZF1XLlzAkd+N2PbFy/dYQc69bOBl5czq/QnVo5tVOrRqhS5smwfKUrtEUh46G/ODPkumjULxQnmBz0ucrh7//uR3setCtFsJ9sB3BRhl0YcbGExiyeJ9B2Zn2cwLZ03yJxT0rf37J8ufrDp5H+0lbLM9BBABe4cPh1PTmiOwTQQQ5HmmgEcAjfFJPphFA6va5LZ5GALfRceJ/BLrN2IFlu89Kz4MrAkjfQhZAAiTgAQEaATyAx6mWJtC57whMn7/ccgya1a+OQT2sZ4Bwp9E0ArhDTZs5NAJow5VR3SewaOUGtOxs7mXyQ6LTubUfOrd2vBpfSHNkudasQx8sW7vJULnKCgC71syDaNsBhAbl+t+3UKlBa1y8/Fdowwy593WSRDi8dRkiRpD/ex9DADpIKpQRoMPkLVh74LwDqbysJwFlTw7lievkCWPrmVboXLUHrcQvv90QWqOVxC3vXRWZU4m13447/GkEcIeaOebQCGCOPrpaBY0ArhLj+KAEWozZgK3HLgW9LN37/8WOhgPjGznU3W/eHszbGrIT2uEkQW8ctG25FT9WVEHVURYJkIARBGgEMII6c5qBQNbClXDlmvV+L5My+dc4YvulOI+wCdAIEDYjvUbQCKAXaeZxlkDD1t2x5uftzg43zbisGb/FtpWzTFPPx0L8371DmpwlDN8WYMaYAahYpthHWdK8KitklLftSX/+wmXhNI8e0BX1qlcQTpfMgoQyApTqsgB/3rgvM09TafcrnRVdauQ1VU3uFnPtzmMU6TAXAi2g4W4pppnXp15B1C6WUfp6aASQvoVuF0AjgNvopJ5II4DU7RNC/A+9luDXy8GX/RJCnAsiksSPiV2j6jucQSOAQzS8QQIkYAICNAKYoIksQXcCl65cQ/ZiVXTP+zFhobw5Ua5E4YC9dT9e0/P1xK5VSJrkSz1TSpmLRgBx2kYjgDi9oBJA+dI4VXZfPH7y1BAc+XNlQ4pkX2H2olW651f2W//j8CbEjR1L99xaJjx8/AxKVjN2pYNc2TMFbAmgZZ1axr5z9z5KVW+Cy3+JZbJUVgU4un0FvL28tCzfUrGFMQK8fvsOGf0m2VwgiWMAADYbSURBVP5SttYeLSJ/2pS9W/ePa4gI3vwPbuSyg5i87qjI7bKctqoFv8Ugv6LS100jgPQtdLsAGgHcRif1RBoBpG6f4eKVDb0yN5mMZy/fGK7FUwGpEsfFpiG1HYahEcAhGt4gARIwAQEaAUzQRJagO4HJs5eg+8DRuuf9mHBwz/Yo61sI3+Ut+/GSrq/D+/6ERrW4hWdY0GkECIuQfvdpBNCPNTOFTeDg0ZMoU6NZ2AM1GtG/a2sk/Sox6jTvpFGG0MNOG9UPlcv5hj5IsrvDxs/EkLHTDFXtaN92Q0W5mPzS1esoXrmh4SsrBJUt60oLQesQ5b0wRoBfr9zGDz2XiMKFOv4jMKF1KZTIkcrSPN69/4D8bWbh9sNnluYgWvHfJo2PtQNqiCbLZT00AriMzDQTaAQwTStdKoRGAJdwcXAQAsoKRYXbzwlyVc63mVImwIo+1RyKpxHAIRreIAESMAEBGgFM0ESWoDuBSvVbY9f+w7rn/Zjwly1LkTpFUuSwrUpw0bY6gd6Hb+G8WDxtpN5ppctHI4A4LaMRQJxeUAnQb8QkjJky1zAU+zcuQqIE8ZEqR3G8M+BB2GoVSmLyiD6G1a9F4h/qtsSeg8Y9uKn08/SetfDyCq9FebrG3LH3EKr5tcf79+I8pJ0t03fYumKmrhzMnEwYI8Dy3efQdYb19mgR/cOVP8PXmNXJ2vtx7Dx5BU1GrhO9VZbTp6xUcWZGc+lXrKARwHIf3U8F0wjwCYWlTmgEsFS7VS927YHz6DB5i+pxjQiYz/Yz5uxQfsakEcCIrjAnCZCAXgRoBNCLNPOYhcCLly+RImtxvH5jzKpIyi/7z+5fH4Czfc8hmLN4te5oo0SJjEvHtsInYkTdc8uUkEYAcbpFI4A4vaASIF+ZWjh3/qIhKOLHi4vfD25EuHDhULhCPZw6e153HfHixsbvh36Gsk2AGQ7lC+tkWYri6bPnhpXTomENDOjW1rD8aifuMWgsJs1apHZYt+NF8omIX7Ysw1eJE7odgxPtBIQxAvSdtxvzt562K+OZEATC2/6B2jW6Ab78IroQeowQ0XzMBmw7dsmI1MwZBoF1A2oiXdJ4YYwS+zaNAGL3R0t1NAJoSVfc2DQCiNsbGZR1mroVq/b9LoPUMDWWy50Go1qUcDiORgCHaHiDBEjABARoBDBBE1mCrgQ279yHmk066prz82S1KpfF+CE9Ai6t3rgNjdr8e/75GD3OV80Zj4J5c+iRStocNAKI0zoaAcTphdWV3Lx1B+nzlcMHZa89A47Pn8bvPXQ8xk9fYIAKYMfqOcicPq0hudVOesm2Mk922wo9Rh6r501AgdzZjZSgau7Xr98gf7k6uHDpqqpxXQkWO1YMFCuQB6WLFUDh/N8jqs0EyUMdAsIYAar3X45jf9xUpypGUZVA64o50bri96rGlCXYvccvkLf1TPgbsGSPLIyM1Dm4cVFUKfCtkRI8zk0jgMcIpQ1AI4C0rfNIOI0AHuGz9GRlq6LcLWfg/pMXpuBQ3zcTetQp4LAWGgEcouENEiABExCgEcAETWQJuhLo2HsYZi1cqWvOz5NNH90flcoWD7h0994DfJOrlCFfKLVoWNP29GGbz6XxPAgBGgGCADHwLY0ABsJn6kAE5i5Zg3Y9Bge6pucbZUl+xQygHNv3HETVRu30TP8pV7d2TdHxx4af3st8sn7zLtRr2cWwErxtKxX/dXInIkeOZJgGLRL/cuw0ytRspusWAcoT/yWL5EfJovmRO0dmeHt5aVGa5WMKYQRQzFiZm0zGs5fGLPFl+U9BGAASxo2O3bZVAbzChwtjpPluT994HEMX7zdfYSapqHaxjOhTr6DU1dAIIHX7PBJPI4BH+KSdTCOAtK0zXPjBc9dRd/Aqw3WoJaBjtTxoVjabw3A0AjhEwxskQAImIEAjgAmayBJ0JZCxQHlc//uWrjk/JlOWUVaWU1aWVf545C5ZA+cvXP74VrfX1CmS2pbJXapbPhkT0QggTtdoBBCnF1ZXUqd5J2zctscQDMp2AL8d2ID/xf8iIP/zFy+R3Lak/Vt/f9315MiSAZuXTdc9rxYJR02egwEjJ2sR2qmYaVImw6HNS5waK9ug1l0HYMHyf7dD0kK78t9E+rSpUcr2xX/JYvkDzrXIw5iBCQhhBPjr9iMU6TA3sDK+E4rAzJ/Ko0DGpEJp0lqMYlDx7TQPl/95qHUqxneTQJZUCbGsd1U3Z4sxjUYAMfpghAoaAYygbnxOGgGM74GsCjpM3oK1B/TfS1ArXiOa+aJC3m8chqcRwCEa3iABEjABARoBTNBElqAbgT8uXkGuEtV1yxc0UYZ0abB73bxAlzv3HYHp85cHuqbXm1O713C/3FBg0wgQChydb9EIoDNwpguRwJu3b5Eia3E8f2HMynrp0qTE/o0LA2krWa0JDh/Xf4tsL6/wuHBkK2LFlH8L6DbdBmH+srWBuOr5pkSRfFg0dYSeKXXLpax8lK1oZTx99ly1nBG8vQOe9lee+lee/k/yZQLVYjOQcwSEMAJsPnoRLcdudE4xRxlCwDd7SkxsU9qQ3EYlVbaqULas4CEugSg+EXByenOpV6ugEUDcz5fWymgE0JqwmPFpBBCzL6KrevDkJfK1mYXXb/V/akArNot6VEaOb750GJ5GAIdoeIMESMAEBGgEMEETWYJuBCbMWIheQ8bpli9ootZN6qBPp5aBLq/fYluS+EdjliQe2a8zGtSsGEgP39gJ0AhgZ2H0GY0ARneA+RUCew4cwQ/1WhkGI6QtXQaNnooRE2cZomnWuIGoUKqoIbnVTKpsr6Bss2DUUbtKWYwb3MOo9JrnHT5hFgaPmepRnmhRo6BI/lwoZXvqv1iBPKYwoHgExODJQhgBRq84hIlrjhiMgulDI+Btc4ztH9cIX8SMEtowU93rPG0bVu79zVQ1mbGYLcPqIEWiONKWRiOAtK3zWDiNAB4jlDIAjQBSts1w0RNsPyePsf28bKZjz5iG+PILx08i0Ahgpm6zFhIggaAEaAQISoTvScAxgQp1fsTeQ8ccD9D4zuq541EgT45AWR48eozUOUrouofuRwHKk3QLpw7/+JavQQjQCBAEiIFvaQQwED5TfyLQY9BYTJq16NN7vU+WzxoT8GXo53n3/XIc5Wu3+PySbue1KpfF+CHyf4FduEI9nDpr3IqJDWtVwoi+nXTrm96Jnj1/AWVbpoePnriUWtkCo6RttQRl2f98ubLBJ2JEl+ZzsHYEhDACNBm5DjtPXtGuSkZWhUCn6nnRpExWVWKJHuTZyzfI3XIGXrx+K7pUy+sb1aIEyuVOIy0HGgGkbZ3HwmkE8BihlAFoBJCybYaKfvHqLQq2nw1lVQCzHBEjeOHXmT+GuqIPjQBm6TbrIAESCIkAjQAhUeE1EghOQPlFdMpsxaEs7WzEESmSD64c3w4fn+C/yC5Qtg5+/f1P3WVFjRIFl45vRcQIEXTPLUNCGgHE6RKNAOL0wspKjPwcKl+CXj6+DZEjRwrUgtev3yBZliJ4ZXvV+1C+qP3twAYo+7TLfGQtXAlXrt0wrISm9aphcM/2huXXI/GQsdMwbPzMMFOlTpEUpYsVsD35XwCZ06dF+PDhw5zDAfoTEMIIkLf1TNx68Ez/6pnRJQLJEsbG1mF1bf9QuDRNysFLdp5Fj1k7pNRuNdF+pbOiS4280pZNI4C0rfNYOI0AHiOUMgCNAFK2zVDRZlw5K1XiuNg0pHaoXGkECBUPb5IACUhOgEYAyRtI+boR2LB1N+q26KxbvqCJCuXNiZVzxgW9HPC+x6AxtqdMF4d4T+uLq+dNQIHc2bVOI2V8GgHEaZuRX8B+TkH5b0X5b4aH9Qhcvf43shSqaFjh+W1PRK+ZPzHE/EaudrNn/XykT5s6RF2yXEybuzRu37lnmFy/2pUxrM9PhuXXI/Hdew+QIX95vH4T2LCifNGfPXP6gKf+lSf/UyT7Sg85zOEhAcONAA+fvkT25tM8LIPT9SIQ1n6ueunQOk+l3ktx+tItrdMwvgoEcn2bBPO7GvdDnacl0AjgKUF559MIIG/vPFFOI4An9Kw398KN+yjfc7HtKbh3piq+ZI5UGN+6VKg10QgQKh7eJAESkJwAjQCSN5DydSPQtvtgzFu6Rrd8QRP169IaLf1qBb0c8H7zzn2o2aRjiPe0vqhoUrTxCE6ARoDgTIy6QiOAUeSZ9yOBGQtWoFMf47ZS6dWxBdo2q/dRTqDXkZNmY+CoKYGu6fUmNF16afA0T6rsvrj/8JGnYdyeb5Vtevza9sCqDdugrJBU0LZNkvLFv2/hfIgXN7bb7DjRGAKGGwEOnruOuoNXGVM9s7pMoHyebzCyua/L82Sa8Mf1eyjddaFMki2tNWbUSDg2pam0K1XQCGDdjy+NANbsPY0A1uy7O1W/tn35X7nPUvz+1113pgs9p3XF79G6Ys5QNdIIECoe3iQBEpCcAI0AkjeQ8nUh8OHDB6TPVw43b93RJV9ISfZtWIhvv0kZ0i08efoMKbIVw7t370O8r+XFb1Ilx8FNxqxGoGVdasSmEUANiurEoBFAHY6M4j6Ban7tsG33QfcDeDhz55q5yPTdNyFGOXLiDEpUbRziPa0v5s6eGRsWG2NCUKs2o40AZtliIax+KFsg/XX9Jgrny4kokSOHNZz3BSZguBFg5s8nMHjRPoERUdrnBCJF9MaB8X6IGdXn88umOh8wfw/mbDllqprMXszu0Q2QOF4MKcukEUDKtqkimkYAVTBKF4RGAOlaZpjgrtO3Y/mec4bl1zLx5HZlUCxrilBT0AgQKh7eJAESkJwAjQCSN5DydSFw7vxF5CsT8tP4egiIHy8ufj+4MdR9lItWbIATZ37TQ06wHGf2rkXiRAmCXbf6BRoBxPkE0AggTi+sqOTVq9dIbjNrKa9GHHFjx8Ifhzc53C/9rb8/UmQthmfPX+guL4K3Ny4c3YIY0aPpnluthEYbAZQ6tq2chawZv1WrJMYhAU0JGG4E6DB5C9YeOK9pkQyuLoHe9QqiTrGM6gYVJJqy9G7uVjPw6NkrQRRRhjMEJrYpDd/sIbv0nZlv5BgaAYykb2xuGgGM5W9UdhoBjCIvV96p649h+NIDcol2Qe3esQ2RKG70UGfQCBAqHt4kARKQnACNAJI3kPJ1ITB26jz0HR7y3sp6CKhaviSmjOwTaqo+wyZg3LT5oY7R6uboAV1Rr3oFrcJLG5dGAHFaRyOAOL2wohJlJQBlRQCjjoplimHGmAGhpjdyxYK5E4egrG+hUPWJfPObXKVw5+59QyXWrFQGE4b2NFQDk5OAswQMNwKU6rIAf9r2P+UhD4G0X8XD+kE15RHsgtKNv/yJNhM2uTCDQ0Ug8GOFHGhXOZcIUlzWQCOAy8hMM4FGANO00qVCaARwCZclBy/ddRY9Zu2EshyuGY8vYkbBLxPDXgKRRgAzdp81kQAJfCRAI8BHEnwlAccEytRohoNHTzoeoPGdScN7o/oPpULNsmPvIVRp2DbUMVrdLF2sAOZPHqZVeGnj0gggTutoBBCnF1ZU0rnvCEyfv9yw0scP7oFaVcqGmn/CjIXoNWRcqGO0ulmnanmMHdRNq/Cax81WpBIu/3VD8zyhJVBWVjjw8yKkTP51aMN4jwSEIGCoEUDZ+zSj3yT4G7CflhD0JRaxql91ZEj+P4krCFm6Wb6UDbk6814tmCkpZnQsL2WBZvnMRYscEaemN5eyB0aJphHAKPLG5qURwFj+omdfsvMses3eifcmNQEo/ItkSY6p7UP/hYgyjkYAhQIPEiABsxKgEcCsnWVdahF4/OQpUuXwhb//O7VCuhQnXLhwOHdgAxLE/yLUec9fvETyLEWhLPGs9xEtahRcPLYVESNE0Du10PloBBCnPTQCiNMLKyrJUqgirl7/27DSf923Dl8mDP27k9Pn/kCh8nUN0ZgoQXyc3b/ekNxqJC1WqSGOnzZ+K8UCubNj1dzxoW4jpEa9jEECnhIw1Ahw9sodVOi52NMahJyv/J8Gsz7JpQCvXjg9BjQsLCR7d0XduPsEhdvPMe0v3838mYwfKyoOTvBzt/WGzqMRwFD8hianEcBQ/IYlpxHAMPTCJ55i2w5g5LKDpv75UWlCp+p50aRM1jD7QSNAmIg4gARIQGICNAJI3DxK14XAus07Ub9lV11yhZQkbeoUAU/5hXQv6LUSVRvjyIkzQS/r8n7tgknI933YP1fpIkaQJDQCCNIImwwaAcTphdWUXLh0NeDzZ1TdqVIkxeEtS8NM//79+wDT28NHT8Icq8UA5Wl25d87GY86zTth47Y9Qkgf0K0NWjQ05+rZQgCmCFUIGGoEWL77HLrO2K5KISIFCW8zAZTMmQrKMvNmPZSnfw/ZvniN7GMe5/HYlb9g/OrDZm0ZCmdOhsO//43nr96YssZDtmWG49mWG5btoBFAto6pp5dGAPVYyhSJRgCZuqWPVmVlrD5zd2PJzl/1SWhwluW9qyJzqoRhqqARIExEHEACJCAxARoBJG4epetCoFWXAVi4wrgnFVs0rIEB3Zxb8n/gqCkYOWm2LlyCJmndpA76dGoZ9LKl39MIIE77aQQQpxdWUzJ59mJ0HzjGsLKb1K2KIb06OJW/bovO2LB1t1Nj1R7Ut3MrtGpcW+2wusTrPnA0Js9eokuusJJ4e3th6YzRKJQ3Z1hDeZ8EDCNgqBGg77zdmL/1tGHFa5U4ecLYGNioCGoMWKFVCiHiDm5cFFUKfCuEFk9FKEvwFmw7GzfvP/U0lLDzJ7QpjTmbT+LYHzeF1eiJMGVrAGWLANkOGgFk65h6emkEUI+lTJFoBJCpW9prffj0JVpP2IRD565rn0yADFEiRcCJqc3g7RU+TDU0AoSJiANIgAQkJkAjgMTNo3TNCSira6bLUwa379zTPJejBMtmjkbRArkd3Q50fc/Bo/ihrjFfxqdLkxL7Ny4MpMfqb2gEEOcTQCOAOL2wmpKK9Vph94EjhpW9aNoIlCicz6n80+cvR+e+I5waq/ag/LmyYc38iWqH1SXe7EWr0KHXUF1yOZNE2a5n9bwJyJrRHN+VOVMzx8hFwFAjQI3+K3D0D+P2atGqVWVypcboFiUDlpm/fvexVmkMj6s8zaU81WWGY++Zv9Bw2BozlBJiDbGiRcLB8X4YvHifKc03StHtq+RGi/LZQ6xf5Is0AojcHW210QigLV9Ro9MIIGpn9Ne1+9RVdJ+5A7cfPtM/uUEZFcOeYtxz5qARwBlKHEMCJCArARoBZO0cdetBwMg9k5X6fCJGxKXjWxElcmSnyn316jWSZSmK12/0X31R2QJS2Yda2euZx78EaAQQ55NAI4A4vbCSkucvXiJltuKG/J2scI7g7W37N2QblC+GnTnOX7iM3CVrODNU9TERI0QI0Bo1inP/3qkuwIOAypY8ytY8Ih0xY0S3rQwwCjmyZBBJFrWQQAABw4wANoMvMjeZjGcv9f9BWeve/1QtD5qWzQazLzWvcNw0pDZSJY6rNVLN47ca9zM2HbmgeR6jEtQumgF96heCWbfjULiWyJ4SyqoHsh00AsjWMfX00gigHkuZItEIIFO3tNH6972nGGIz5m06bN6fOxyR61GnAOr7ZnJ0O9B1GgEC4eAbEiABkxGgEcBkDWU5qhJQltlXlts36sj3fVasXTDJpfRlazbHgSMnXJqj1uCxg7qhTlXnjJZq5RQ5Do0A4nSHRgBxemElJT9v34vazX4yrORc2TNh4+KpTudXVsFJm7s07ty97/QcNQcumDIcpYrmVzOkLrFevnyFrzMXhr//O13yOZskcuRImDaqH0oXK+DsFI4jAV0IGGYEuHbnccAT87pUqXOS2Z0qIF+Gr6HUWKTDXCh/oZv1aFAiM7rXlu8fi8/78eDJS+RpPRNvBfuH43ONnp6v7FsNGVMkwLmrd1C+x2JPwwk5P0m8mNg1ur6Q2kITRSNAaHTMfY9GAHP311F1NAI4ImP+63cfv8DUdUexeOdZvH7rb/6CQ6hw6/C6ULbQcuagEcAZShxDAiQgKwEaAWTtHHXrQaBktSY4fPy0HqlCzNGzYwu0a1YvxHuOLg4bNwNDxk13dFvT6+VKFMKcCUM0zSFTcBoBxOkWjQDi9MJKStr1GIK5S1YbVnLXtk3xU8uGLuX3a9sDqzZsc2mOWoMb1KyIkf06qxVO1zhFKzXEidPndM3pTLLw4cOja9smaN+8PpSVe3iQgAgEDDMCbD56ES3HbhSBgeoaDk9qjLgx/l3+pXr/5abdk10B93HJ+YgRvFTnqFfA2ZtOYuDCvXql0z2P8gt35RfvyvHm7Ttk8JsE/3fvddehdULlH9ZjU5oiZlQfrVOpGp9GAFVxShWMRgCp2qWaWBoBVEMpTaArtx5h1s8nsHr/73j1xpoGAKVZSRPEwvYRzv9SnUYAaT7iFEoCJOAGARoB3IDGKZYg8PDRE6TO6Yt3Bv7OYsfqOcicPq1LvA8ePYkyNZq5NEetwTGiR8OFo1sClqNWK6bMcWgEEKd7NAKI0wurKFEexsyQvzz+/ue2YSVvXTET2TJ951L+eUvXoG33wS7NUWvwV4kT4tRuObdL7jdiEsZMmasWCtXjFC+UBxOH9ULc2LFUj82AJOAqAcOMAGNWHMKENUdc1Sv8+Pixowbsxf5R6NJdZwP2f/343oyvY34siTK5UktbWskuC3DhhjHL7+gBrUPV3GheLvunVGW6LcT5a/c+vTfTyYJulfB9usRSlUQjgFTtUlUsjQCq4pQmGI0A0rTKI6HKF/67T13Bir2/Ye/pv/DexKtDOQuqUaks6Fozn7PDQSOA06g4kARIQEICNAJI2DRK1oWA8kSk8mSkUYfyy/o/Dm+C8jSfK8frN2+QPGsxKEsVG3GsXzQZeXJkMSK1cDlpBBCnJTQCiNMLqyg5d/4i8pWpZVi5sWJGx4UjW+Hl5dq/IVeu3UDWwpUM0/3LlqVInSKpYfndTWykCc9ZzQnix8O4wd1QtEBuZ6dwHAloQsAwI0DTUeux48RlTYoyMmjBTEkxo6N9b64nL14jd8sZpn4CLPe3STCva0Ujsbud+9TFW6jcZ6nb80WfGN72lPyeMQ2QMG70T1I7Td2KVft+//TeTCfKFwzKFw0yHTQCyNQtdbXSCKAuT1mi0QggS6dc06mstHPm8m0c/v0GfvntBk5c+AcvX791LYjJRy/pWQXZ0iRyukoaAZxGxYEkQAISEqARQMKmUbIuBFr81BdLVv+sS66QkvxQuhhmjh0Q0q0wr1Ws1wq7DxjzwFNb21YGvWxbGvAAaAQQ51NAI4A4vbCKkrFT56Hv8ImGlVvWtxDmTnRvqxZlJYMbN28Zon1g97Zo3qCGIbk9SaqsHpQ2Vynce/DQkzCaz1VWMa5Yphj6dm6FRAnia56PCUggJAKGGQHytZmFf+4/DUmT1NdalM+B9lVyBaqhzYRN2PjLn4GumemN8mXzjpH1kCR+TOnK6jZjB5btPiudbmcFh2TSmL3ZthXCAnNuhVA+zzcY2dzXWTxCjKMRQIg2GCKCRgBDsBue1EpGAOUp+CfPX0NZnk95IF55b3vBh/fK6we8t73a/vff/X/v/XvNdv7ZdWWeMk65GBDDdv7v67/jPp5/vKfk+3ge8BqQzzYn4PW/Of+d/3vtX02fz7FdsY3/LM9nn5ynNpPnrQfPAv25/fCZKbfd+axsj07jx4qKfeMawSu88/vj0QjgEXJOJgESEJwAjQCCN4jyDCHw3vbDl/IL/bv3jfuF/rjB3VG7Sjm36h81eQ4GjJzs1lxPJ32XNhX2rl/gaRhTzKcRQJw20gggTi+sokTZokV5StyoY1T/Lqhf4we30rfs3B+LVm5wa66nkwrlzYmVc8Z5GsaQ+R16DcXsRasMye1q0siRI6Flo1po1bg2okWN4up0jicBjwgYYgR49OwVsjWb6pFwUSdPaF0KJXKkCiRv96mr8BuxNtA1s70JyQAheo0vXr1FLttqDc9fvRFdqtv6hjcrjh/yBt7bTnlasdbAlW7HFHliyi/jYPPQOiJLDKaNRoBgSCxzgUYAy7Q6UKFWMgLctBk+89uMnzxIoEGJzOheO79LIGgEcAkXB5MACUhGgEYAyRpGuboQOHnmNxSp2ECXXI6SnNm7FokTJXB0O9TrR0/+Ct8qfqGO0eqm8rThuQMbkCD+F1qlkCYujQDitIpGAHF6YQUlj588RaocvvD3f2dYuSd2rULSJF+6lV9ZDUdZFceII5JPRFw6tg3KF9WyHUb+2+suq3hxY6Nts/poWLMifGzseZCAHgQMMQIcPHcddQfL4dRxtQnKk/Ff/y9WoGnKMiV5W8/C3cfPA10305v4sW1Peo1p6PIeOEYyWL7nHLpO326kBE1zR4kUAb9MaAzl9fND2a4ia9OpAU9gfn7dDOfKk4anpjdHZJ/ANYtcG40AIndHW200AmjLV9ToNAKI2hnq0pLAxsG1kCaJa7+YphFAy44wNgmQgNEEaAQwugPMLyKBYeNmYMi46YZJS5n8axzZuszt/G/9/ZEiazE8e/7C7RieTBw/uAdqVSnrSQhTzKURQJw20gggTi+soGTtph1o0KqbYaUm+yoxju90/8G7m7fu4Lu8xv0dvmT6KBQvlMcwfp4kzl2yBs5fkG8LcmWbgDZN66Ju1fI0BHjyAeBcpwgYYgQw0y/BP6ccLXJEnJzWHDYjbrBj8KJ9mPnziWDXzXRhWodyKJw5mTQlVe27LGAPX2kEuyhUWQlAWREgpKNQuzm4fvdxSLekv7a8d1VkTpVQmjpoBJCmVaoLpRFAdaRSBDTTz0Bh/X3LFQGk+EhqLjJbmkRY0rOKy3lMZQQY7wfFNMuDBEiABD4SoBHgIwm+koCdQLFKDXH89Dn7BZ3PGtepgqG9O3qUtWqjdti+56BHMdydXL5kEcweP8jd6aaZRyOAOK2kEUCcXlhBiZFL6yt8G9ie7h7Zr7NHqHMUq4KLV655FMPdyWr8G+hubk/nzVq4Eh17D/M0jGHz/2dbzadFgxoBnyFuGWBYG0yf2BAjQMcpW7Fm/++mg5s9zZdY3LNyiHWdv3YPZbotDPGeWS4WyZIcU9sb51xzheOlmw/g22m+K1OkGzu/W0XkSpckRN0txmzA1mOXQrwn+8W+9QuhVtEM0pRBI4A0rVJdKI0AqiOVIiCNAFK0iSJVJDCxTWn4Zk/pckQzGQFcLp4TdCUQJ0ZkHJnURNecTEYCNALwM0ACgQnce/AQ33xfCu/fvw98Q8d3C6eOQMki+TzKOH76AvT+P3tnHl/T0f/xT5PYd0prK7VUUesjliD2JGSxJZYgliSWJoqoNQ3VBlFrKvZdW9GKIookSFVVq7GWFkXrqSqlWktrD88dv5/npU/d5J5zZ87MOfnOP7k5M/Nd3t/zkuucz8xMm+uUDb2TixQuhFMZqXBzddVrwhLzSAigThlJCKBOLaweycOHD1HdwxeXLl+RluqqeXHw927llP+omDisTNzglA29kytVKIf9O/XvaKDXL495t27dRm3Pjrjyx1Ue5qTZYH/H+/bohEF9u6P0cyWlxUGOrUlAihDAd9wHOHnuN8sRDfGqiwkhLezm5R+9Bsf/fdluv9k73FxdsNt2PIAZVjxZfYeGMiUKYdec/nB52vYUthstYePXmJP0pdlvuafG361lTUwJa/vUPhUvkhBAxaoYExMJAYzhrJoXEgKoVhGKRySBymWKY9u03na/j2Tlm4QAWdGhPp4ESAjAkybZcpQACQEcJUXjcgqBjzalYPDIidLSzeXmhtP701CooHM7+Bw6ehxtOveTlsfWtYvRuEEdaf5VcExCABWq8H8xkBBAnVpYPZLDx06gdae+0tJ0tb0TOZ2RBvYi15m2cesODHgt2hkTTs3N2JGEyhWfvqjQKcMGTI5ftBqTps8zwJN4F+w7SUD71o8EAQ3qviLeIXnIEQQMFwLcvZeJ2mHzcT9TnspXVGXjBrZDoGcNu+ZXbDuEyR/stttvhY6R3TwwJMBd6VTu3c9Es9eW48p1Oee2GQGH1YDVwl5LP/QjBs5Mttdt6us1K5bCptiepsmBhACmKRX3QEkIwB2pKQySEMAUZaIgORGYE9Eefk1e0mWNhAC6sNEkHQRICKADGk1xmgAJAZxGSAYsRmBg1AQkJadKy4q9PGcv0Z1tmbZnnVXcvXDt+g1nTemaHzWkH94YOUTXXKtMIiGAOpUkIYA6tbB6JNMTlmPqnEXS0mQva9OSljnt//IVtjtOe7AdDmS0uAkjMTCkmwzXTvtkuwK4245W+OXiJadtqWSgXq3qGBDcFV382iFfvrwqhUaxmIyA4UKAb89eQsc3Ek2GybFwk2ODUaOi/W07frt20/YCepklRRCPCZUvVQTpM/vBzkL0x8Ok/kzJOI3I+C1SYxDtPG16CCqVLmbXzYUrN9B82HK7/WbuyJ3LFUeWDEEuN3Nsh0dCADPfbc7FTkIA5/iZdTYJAcxaOYpbKwH2nXjj2z117QbAfJEQQCtxGq+XAAkB9JKjec4QICGAM/RortUIsJfn1Rr54Per16SlNnbYQIweGsrFf69Bo7Btp5xFQLVrVMOu5NVc8jCrERICqFM5EgKoUwurR+IVGIr9h49JS3NUZCjGDedz1Fgz31747uRpKbm0a+mBD5fOluKbh9P1m9MQPiKGhynlbLDdJrp19EGfbh3xSvWqysVHAalPwHAhwLrPvsW4JTvUJ6MxQvbS8Zul2b98ZKuw2WpsK7fV47rAo6a628iETt+Ez46ctWwJ6lR+Husndc82P/chi/HHjVvZjjPjgOxEOSrlREIAlaphbCwkBDCWtyreSAigSiUoDtEEPojuikbVy+l2Q0IA3ehookYCJATQCIyGcyFAQgAuGMmIRQhkHDoK76AwqdmkrlsK93q1uMSwYMVaRE+W8yLlGduqnON7t6BUyRJccjGjERICqFM1EgKoUwsrR8LOhWer6JmoTFbbkrgITdzrcnE/PnY2Fq5cy8WWViNsxfkP+7cjT57cWqcqMz5owHDs3G3N45AfQ2a7BAQH+qGrnzeKFnHuOIrHNumn9QkYLgSw6kO96hVKYvPk4GzvmG37TmHo3K3ZjjPzALYFLNsKVsXGVsK3HLECmQ/kbLFjBJNJ/VuhV5va2brqG7cBXxz7KdtxZhwwNbwtglrUNEXoJAQwRZmEBElCACFYlTdKQgDlS0QBciDg2/glxEc6913Qqv9n4ICXTHAmQEIAzkDJnEMESAjgECYalEMITJ2zGNMTnN9SWS8utsruVEYq3Fz57Cp47PgpePr31huO0/MSpsUguKuf03bMaoCEAOpUjoQA6tTCypGsS07BoKiJ0lIsWCA/zhzYbtuZ1o1LDFt37EbvwaO42NJjJGlFPFo3b6xnqhJzzl/4Fc39euHqNTlH9BgJIa9NsOHdujl6dO6A1p6Nud2DRuZAvowjYLgQoOfbScg4ed64DA3y1NWzBqYNbJettzv3MuERuRTX/rqd7VizDmBbs++dG4aiBdU7tyRh49eYk2RdVZgW9nGJe7B0ywGz3mZZxt3Hqw4mhrTMcowqnSQEUKUSxsdBQgDjmavgkYQAKlSBYhBJoHD+PEh5pw9KFS3glBsSAjiFjyZrIEBCAA2waCg3AiQE4IaSDFmAQOtOfXH42Alpmfh7t8KqeXHc/D94wI46aA+2SlVG6+zbDsviY2W4VsInCQGUKMOjIEgIoE4trBzJwKgJSEpOlZaiT5vmWLNoBjf/167fQBV3L2k7HAzp3wOTo0dwy0eGoeSUdPSLHCfDtTSfzxYvhk4d2iAwwPvRDkdshyBqROBJAoYKAR7aFmHXH7QQN27eeTIGS3x+o08L9PN2bAuYmOXpSEw/aom87SUR3dsT/X3q2euWcv2B7QZsE7UK5y7LO3dOdOI+7lWQMMzXITfJe08ian6KQ2PNNqh+1dL4aGI3U4RNQgBTlElIkCQEEIJVeaMkBFC+RBSgkwTibMLYQJtA1tlGQgBnCdJ8RwmQEMBRUjSOJwESAvCkSbbMTODS5Suo7uGLh+yBoaQ2860x6B/chav3fpFjkZzyKVebjhorVrQwvt+XCldXF0enWGocCQHUKScJAdSphVUjYccBVGvkg9+vynvWHzdhJAaG8H0G3bZLfxz85jspZatSqQK+TvtIim+eTmUescAzDz22Klcsjx5dfB/tFFC29HN6TNAcCxIwVAhw7tI1tIpaaUGMQOIbgXB/uaxDuR06dQFBk8z/D2pWyVYtVwLb4uRthfa02PZ+ew4hUz9+Wpdlri2K8keb+pUcyuf0+d/hM+Y9h8aabVD+PLlweOkQuJhA/UZCALPdXfziJSEAP5ZmskRCADNVi2LVSoB9B2HfRXg0EgLwoEg2HCFAQgBHKNEY3gRICMCbKNkzK4HEj7cgYvRbUsM/kL4eL75QjmsMS99Pwug3p3O1qcVYykdL0LB+9kdGarFplrEkBFCnUiQEUKcWVo0k49BReAeFSU2PvTRnL895tjffScC7i+U9sz+0awMqlCvDMyXDbd3PzERQ/2H4bG+G4b5Vceji4oJWzRqhT7cAsJ0rcufKpUpoFIcEAoYKAVIzTiMifouENMW6ZFttHFw0CIVsW6E60pjQud2oVTh7Uc42YY7EyGPMOtuK7Hq2ldmqtBHzUrD5y5OqhMM9DvYQkx3J4Oag6jvzwUPUDV+AW3fucY9FBYOp74SgcpliKoSSZQwkBMgSj6U7SQhg6fLaTY6EAHbRUIfJCbCjAD6Z0gvs+wiPRkIAHhTJhiMESAjgCCUaw5sACQF4EyV7ZiUw4LVobNy6Q1r4FcuXxcFP+S8Y+f7MWTT27i4tr9cjBmD8iEHS/Mt0TEIAmfT/7puEAH/nQb/xJzBl9iLMmLecv2EHLZYr8zy+2b3JwdGOD0v//CsE2l5iy2ozJo3GgF5dZbnn5vfqtRto3z0cJ0//yM2mWQ2VLFEMPbv6IaR7J1SqwFf8aFYmOS1uQ4UA7Gx2dka71Vr5UkXw6ax+mtKaZ+Mw28Jn1TMYQS1qYmp4W01cRA2++udtNB26DHfu3RflQrpddjQFO6JCS+s68UMcOXNRyxTTjJ31qg8CPKopHy8JAZQvkbAASQggDK3ShkkIoHR5KDidBFxdnsGqsV3QuAa//1CSEEBnMWiaZgIkBNCMjCZwIEBCAA4QyYTpCbDVei819AZ7UC+r9evZGbPeHsvdPTvqgB15wI4+kNHq1aqOnRtWynAt3ScJAaSX4L8BkBDgvyjogyACrTqG4Mi38hb9sZXW8VOiuWd389YtVKrfDnfvyVm8x1aPr1k0g3teMgyev/ArfLqFg/2kBrAFzWyXgNDegfBq2TTHHiOUE+8FQ4UAg2Ztxs6DP1iOs5Zz2R8nf/63G2g1YgXYufVWbfnz5sKXCWEokDe39BRXpx3BW6t3SY9DZACbYnuiZsVSmlzELE9HYvpRTXPMMjjM918Y27OZ8uGSEED5EgkLkIQAwtAqbZiEAEqXh4LTSeD17k0x2L+BztlPn0ZCgKdzoav8CZAQgD9Tspg9ARICZM+IRlifwJcZh+HbU+6q9VUJcfD3aSUEdviIGKzfnCbEdnZG2XbAx/duQclni2c31HL9JARQp6QkBFCnFlaM5NdLv6FGUz8w4ZWstiw+Fp192wlx36HHQHy1/4gQ29kZLZA/P07vT0We3PLf6WQXqyP9Z378Cb7Bg6WJ8xyJUcaYF8qVRljvIPQOCkDRIoVkhEA+DSRgqBDAc9hy/HJFntJXFNcRgU0Q0amhZvO9p6zHV9/9rHmemSbEDmiDHq1fkR6y//g1OP7TZelxiArgpXIlsDWut2bza3YexYQV6ZrnmWGCR83yWD2ui/KhkhBA+RIJC5CEAMLQKm2YhABKl4eC00GgQ6OqiI/sYFOW65icxRQSAmQBh7q4EiAhAFecZMxBAiQEcBAUDbM0gbdnzMfshauk5ehqO1bx1Ndpwh5+r/5wI4ZHT5WW3/zpE9Gjcwdp/mU5JiGALPL/9EtCgH8yoSv8CHyQ9AmGjn2bn0GNlpjg6uS+bShRrKjGmY4Nj4tfjHfmLnNssIBRG1YnoIWHuwDLckyyI3s69okAE5BQ+zuB/PnzIbiLLwb370nHBvwdjaV+M0wIwLZmbzB4kaXgPU5m8cgAtK734uNfHf65fvd3GLN4u8PjzTiwdqXn8PFbPaSGfvTHX9E5Zq3UGEQ7H2Nb+R5uWwGvtbFjAdjxAFZsRQvmRcaCQdxfTPBmRUIA3kTNY4+EAOapFc9ISQjAkybZkk2glu173po3ApEvtxv3UEgIwB0pGbRDgIQAdsDQZaEESAggFC8ZNwmBFv59cPT499Ki/Vedmti+XtzZ0j/8+2c0aNNVWn5d/b2wZLa8l2SyEichgCzy//RLQoB/MqEr/Aj0GzoOydvkLW6r+8rLSN8oTsy2Z99BBPQawg+YRkuRYb3w1tjXNM5SezjbGaBTSCQdE2CnTEwg6evVEsPC+6Be7Rp2RtFlsxIwTAjw5Xfn0GfKx2bllGXce94NxfPFC2Y55mmdf92+C/Yi6OYdOee9PC0mEdc2T+mF6i88K8K0QzbZine28t2qjZ3L+3l8KEoVK6A5xVt376Nu2HxkPpC3jZLmoDVM2DW7P8qVLKxhhvFDSQhgPHNVPJIQQJVKGBsHCQGM5U3exBFgf18/mtgNpYpq//7hSFQkBHCEEo3hQYCEADwokg2tBEgIoJUYjbcagQu/XsYrzfylbun8esQAjB8h9miCWs0DpL1wKF60iG21akqOO/+XhADq/GtBQgB1amG1SO7dv4+q7t64fuNPaakNH9wXE15/VZj/O3fv4sX6bXH79h1hPrIy/HLVSti7LTGrIabsO3f+IgIHDMMp2w4B1OwTaNm0IaJe7Y9mjerbH0Q9piJgmBDASg++n6ywsw+ORi5IxaYvTjxp0nKf+3jVwcSQllLyYi+6PSKX4sZNOX80jUjas3YFLB/dSbcr79Hv4cwvv+uer/LE+cP94NWgssohgoQASpdHaHAkBBCKV1njVvo+tM72Erhe1dJ2WbPjoNixUNSsR6BYoXxYGxOEymWKCUuOhADC0JLh/yHg7P/n/scc/UoEHCJAQgCHMNEgCxN4f10yXhs3WWqGnyQuhId7PaExvDpqEtZu2CrUR1bG05KWoUFd+cd1ZhUj7z4SAvAmqt8eCQH0s6OZWRP44uuD8A+Wt1qeRbfxvXnwbNIg60Cd7O1sW73+2d4MJ63on37082SULf2cfgOKzvzj6nX0jRiLPfsOKBqhOmGx70ljhoWjeWPtO1GrkwVFwggYJgQYtTANG/Yctxz1ZrVewMoxnXXntefYT+gXt0H3fDNMLFIgL76YG4q8AraNzS5/ds+xe8/KbXaED/ybVNOdYtT8FCTvPal7vsoTIzo1xIjAJiqHSEIApasjNjgSAojlq6p1EgKoWhmKy1ECBfLmxnvju4Ad/ySykRBAJF2y/SQBEgI8SYM+G0WAhABGkSY/qhJgD+A3p34qLbyCBfLjzIHtyOXG/3ijJ5Nas/4TRI6Rtz3/6KGhGDts4JMhWf4zCQHUKTEJAdSphdUiefOdBLy7+D1paeXLlxc/2P6G5MmdW2gMsxasROzMBUJ9ZGV8zuRxCOmuf/FhVrZl97FdJaJjZ2Pp+0myQzGFfyZ6ibHtgMGOVaJmTgKGCQH8xn+AEz/9Zk5KWUTNzmVn57PrbQ8ePny0Wu7i7/K2stEbu5Z5M4d4o2PTl7VM4TK2Z2wSMk6c52JLRSMF8+XGV/PCnRJZLNlyANMS96iYntMxtar7Ipa8HuC0HZEGaEcAkXTVtk1CALXrIyo6EgKIIkt2jSCQJ5cblo4KQJMa5YW7IyGAcMTk4P8JkBCAbgUZBEgIIIM6+VSFAHv4XqWBF278+Ze0kLxbN0Pi4pnC/bMtiOu06Cjcjz0H9W0P7Hesz1k7dJEQwN7dYPx1EgIYzzyneGzaIRjHvz8jLd02nk2wbvkc4f73Hz4Gr8BQ4X7sOfCznRe/ev40e92WuJ6UnIqomDj8+ddNS+QjMolnnnkG/t4tbYKACFSuKP6ZkMhccqJtQ4QAd+9lorbtHPL7mQ8sx9jZ1dgMyIwPv8DCzfstx+bJhBpWL4s10YFPXhL++ceLV+E1arXUM+dEJ9mtZU1MCWvrlBsr70pRqlgB7J0b5hQf0ZNJCCCasLr2SQigbm1ERkZCAJF0ybZIArncXDF/uC+YyM6IRkIAIyiTD0aAhAB0H8ggQEIAGdTJpyoE9uw7iIBecrd0nhoThUF9uxuCpH6rLjh7Ts4CFRcXF5z4aiueLS7uOCdDIGpwQkIADbAEDyUhgGDAOdT8z79cRG1PeQIrhj12/DC8OiBYeAXuZ2aiUv220l5SFypYAKf3pwnfPUc4yGwcnDl7DoNHTsSBI99mM5K6GQG2m1J4SBBGRYaiSOFCBMUkBP4DAAD//6+1yvUAAEAASURBVOydBVhV2dfGXwu7O8bC1jGxu7ADW7HFwhxb7AAdC1sRA0XEQEXBAEzswBw7x1HHGrsV/O72G+cvStw4++x9zl3neXzgnrP3Wu/6ravgPe/ZO84XwwHOx4Xbj9BktC/nLGLCB03rANssaSxKfuP+U9QZ5m1RDNknx4kTB8HTOyJXplSqSZ2+7hA8Ak6qlk9EIt8xLVA6f1aLUj99+Q5lnJdYFEPmyUcWdEf6lEmkldj59804eP6OtPqMFZYssQ3OePY2djiNMxAo32cpHr94o3kWk7rWQNsav2q+DrUKWL7jFNx8DqiVjmueDeNaoUTezNHmuP/PK1QZsDza63RBOwQSJoiP+QPqo3rxXKqJnrhqP1YFn1EtHyWyXgJpUiTG8YU9rBcAVS6EQMYCFfDpc3iUuZ9ePxbleTpJBPRCYNzv8zDPc7XQco4FrUNe25yqaBjg4grv9VtVyRVVEo9ZE9Cycd2oLuny3I7dB+DYc4gUtW30movqlcpKoUWEiLJ1WuPajdsiUkfKWbVCaWxeNT/SOXqhXQJevpsxaMxUoQUc3LYGhfLbqqKhTfdBCN57SJVcUSUJWLMIFcuUjOqSrs59Dg/HHI9VmD5vGT5++qSr2ngVky5Naowb1hftmjcAu/dHh9wE4qhhBPALvYgRS0LkJmGGusQJE3y98RUvruVv9GZj1+LczYdmqNDOlB4NS2FYm0qqCA4Pj0Blw82HR8+1f5MtOmC/ZEiJPTM7G/6hjW6E8ecr9V+GB09fGz9BQyOXDW2CqsVySquYjADStoa7MDICcEcsZQIyAkjZFhIVA4GkiWyweFBDlC/0SwyjlL9ERgDlmVLEqAmQESBqLnSWLwEyAvDlS9HlJlCxfjtcunpDmMismTPi/AH1bsxv2LoTPQeNE1ZvyyZ14TFzgrD8aicmI4DaxKPPR0aA6NnQFfMJOPYcih27Q80PYOHMjBnS4eKhQNVufC5Y5oMxU+ZaqNr86QN6dsS4oX3MD6CxmZev3cTAUVNw/NQ5jSkXJ7d86eKYNWkE8ufJJU4EZY6VgCpGgEne+7EySH9P9BTPkwl+41vHCtmYAd4hZzFh5T5jhmp2TDrDU9kH53ZD/HhxudewK+wmerkHcM8jMkH/ZmXRv1k5RST0mLkVe07fUiSWbEEGt6qA3o1LyybrPz1kBPgPhdV9Q0YAq2v514LJCGCdfddq1elTJoXnkMYokiuD6iWQEUB15FabkIwAVtt6oYWTEUAofkoukMDd+w9QtEoTgQqA9i0bYe6U0appePDoCQpVaKBavh8TsSf2Lh/djrhx+X8W92NuEa/JCCCCetQ5yQgQNRc6az6BDx8/Io9dHbx5+9b8IBbObONQHwunq2fuOnfxCqo17mihavOnFymYF6EBYlfxMV+9eTMjIiK+ruQzacZCPH3+wrwgVjbLJkECDHLugoG9OoJ9T4d8BFQxArSd7IcTl+/JV72FitrV/BUTu9SwMMr/T3/++j3K910a7fKAiiSRIMjCgQ1hb8d/6ZyeswKw+9RNCSrmI4Ett7J7ZidkN6wKoMTh7ncEC/yPKxFKuhh1S+cxLGcs7j/dsQEhI0BshPR7nYwA+u1tTJWRESAmOnRNJgL5sqXFksGNkS19CiGyyAggBLtVJiUjgFW2XXjRZAQQ3gISIIiADEs6L509Gc0a1laVQBn7Vrh+809Vc36fbNfG5ShZrPD3p3T7PRkB5GktGQHk6YVelOw7eBzNOvcTWs5iwworrQwrrah1sJvS+crUFXZDmt2DuGBYASGTYSUEazuYCWDK7CVYuXYzPkezpZe1MYmtXmYcWThtHNhXOuQiwN0I8OULULLnYrx6+0GuyhVQo/S+yM6zAxF8UtzyaAogiTVEteI5sXQIX/f3o2dvUGXgcnw2bA+g18MufxasHdNSsfKCTlxHnznbFIsnUyC2hcLeWZ1lkhRJCxkBIuGwqhdkBLCqdv9XLBkB/kNB30hMoGbJ3JjZuw6SJbYRppKMAMLQW11iMgJYXculKJiMAFK0gUQIINC+11Bs3yVuSWf2VDx7Op49Ja/mMXjs71ixZpOaKSPlGtG/O4b1d4p0Tq8vyAggT2fJCCBPL/SiZJSrOxatWCusHHZT/NLhbciQPq2qGjr1GYGAoL2q5vw+2TzDKjqOhtV0rPVg2wWM+30eQvYdtlYEJtXNVgRw+a0n+jo5Ws1qRCYBEjSYuxHgr0cvUH2Ql6Dy+KbdOKENitlmVCxJSNgN9HYPVCyejIHixY2Dfe5dkDltcm7yFm89gRnr9f0Ps5tTLbSqppybW89/T9kvaWEePZEiSUJu7zlLApMRwBJ62p5LRgBt989c9WQEMJcczVODQFzDz8y+DmUMf8qCfS/yICOASPrWlZuMANbVb1mqJSOALJ0gHWoSkGFJ52KF82PvllVqlv01l//2Xejaf5Tqeb8ltCteBMF+y7691PVXMgLI014yAsjTC70oKVO7Ja7fuiOsnMIF8uBAoI/q+Zeu9sOw8dNVz/stYZN6NbFintu3l1b79eCxU5g4fQFOnvnDahmYUniV8nbwMKygkdEKV5MwhZNaY7kbAdgT7uxJd70d7Ib22aXOSGQTX7HSPhmWGKnQbxmevXqnWEwZAw1oXg79DB8w8zjYChS1h67E7QfPeYSXIiZ7zx2Z74TkCt7Y1vPKHaxpq12ao1yhbFL070cRZAT4kYj1vCYjgPX0+vtKyQjwPQ36XiYCqZMn/roKQJWiOaSQRUYAKdpgFSLICGAVbZauSDICSNcSEqQCgf2HjsOhk9glnQf07IhxQ/uoUG3kFI//eYYC5erhC/vwRcARL15cXDm2E2lSKbO9pIASjE5JRgCjUXEfSEYA7oitKsGtO3dRqkZzoTX36eaISSP7q67h6o3bKFentep5vyVMlTI5rh4PQvx48b6dstqv7Od40N6DmDrbE+cuXrFaDsYWnj5dGni6TwIzBdAhlgB3I8CcjUcxb/MxsVVyyJ4naxrs/L2D4pEnrNoH7+CziseVKWDWdCmw170zlyfNjl++h3aT/WQqV3EtDcvnw+w+9RSP287VD8cv3VM8rgwBXRwro2u9kjJI+UkDGQF+QmI1J8gIYDWtjlQoGQEi4aAXkhAoWzAbZjnXQcbUySRRBJARQJpW6F4IGQF032IpCyQjgJRtIVGcCYx2m4OFy9dwzhJz+M2r5qNqhdIxD+J0tWL9drh0Vdx2oOyD+OaN7DlVJ09YMgLI0wsyAsjTCz0oWbJqPUZMnCm0FL8Vc1CjcjnVNbCbz4UqNsTDR09Uz/0t4fa1S1DOrti3l1b/lfWE/byZuWA5Tp+/ZPU8YgLAzIjjh/UFM9LQIY4AdyNAz1kB2H3qprgKOWVuUrHA16emlA5//tZDOIwRt9eN0vVEF2/FsKaozOGJsyGLg+F/UN//+C4b2gRVi+WMDq3Z5yd774dX0Bmz58s8kdffVyVqJiOAEhS1GYOMANrsm6WqyQhgKUGarySBBPHjga3U1L1BKbDVrmQ6yAggUzf0rYWMAPrur6zVkRFA1s6QLp4ERN8UTJw4EW6eDEHChDY8y4w2NruBxW5kiTpaN62HRTPGi0qvWl4yAqiGOtZEov/OfxPIzD/MBESHtgm07DoQu0OPCCsikeFnxw3DzxD2s0TE0WPQWPhtDRKR+mvOwc5dMGpQL2H5ZU6858BRzF68CgePhcksU7i2ds0bYtbkEbBJkEC4FmsUwN0IUGXActz/55Xu2I5oWxlODfg8YVx3uDeu33uqO2bfF1SvTF7M61//+1MWf//y7QdU6LsU7z9+tjiWrAEypEqKA3O7cfmwfmPoRQxfEiJr6Rbp4rWCh0Wi/p1MRgAlKGozBhkBtNk3S1WTEcBSgjRfKQL5f0mH6T3tUShneqVCKhqHjACK4qRgMRAgI0AMcOgSNwJkBOCGlgJLSuDPu/dRopqDUHXsKU72NKeoIzB4Hzo6DxeVHunTpsalI9sRN25cYRrUSExGADUoG5eDjADGcaJRsRN49+49bEvb4/37D7EP5jRCtKHEe/0WDHBx41Rd7GGLFymAPf4rYx9oxSPCzl7AvKWrsc3w8z48PMKKSURfOtsiYNXC35EiuTyrUUavVl9XuBoBnr9+D7teHvoi9m81K0c4oGKR7Fxq8wg4ienrDnGJLUtQ9gTawbldkTZFEsUk+ew+h3Er9ioWT8ZAToYn9ka0rcRF2qU7T9DIxYdLbNFB2VOOZ5Y6I7FNfNFSfspPRoCfkFjNCTICWE2rIxVKRoBIOOiFAALxDcuy9Wxkhz5Nyhic2PLu8UdGAAFvDitNSUYAK2284LLJCCC4AZRedQLLfPwwdNx01fN+n5Dt6yxyWdpnz18ib5k6iIgQd3Ng92YvlPi14PdYdPc9GQHkaSkZAeTphdaVBO89hDbdBwktY9zQPhjQs6MwDbf/uoeS1ZsJyx8nThxcNpjJ2J7vdMRMgPXK07AC0OoNAXj1+k3Mg63watFC+eHnNQfp0qS2wurFlczVCHD04l20d9sorjqOmU8s6oHUyRNzyfDw2WuwlRTCI75wiS9LUKVXVWg6xhd/3HokS3lcdGyb4gj2BB+P49PncBTrvggfP4XzCC885oZxrVAib2bhOn4UQEaAH4lYz2syAlhPr7+vlIwA39Og79UmUDhnBkztXgsFc8i5CsD3PMgI8D0N+p4nATIC8KRLsaMjQEaA6MjQeb0SYDdw2I0ckceBQB8ULpBHpARUa9wR5y5eEaZh5MCeGNq3q7D8aiQmI4AalI3LQUYA4zjRqNgJDB0/HctW+8U+kOOIvVtWoVjh/BwzxB66eLWmuHP379gHchqxcPo4tHFQdoVnTlKlCMtMAGs3b4en9wZcv/mnFJpkEVEgb25s8V5AxhIVG8LVCLBix2m4+oSqWI46qTKnTY4Dc/j+4qyXm4MxdSR35tQImtYRBkOZxcelPx+j0ag1FseROQBbunfr5HZcJTYevQYXbz/mmkNU8Amdq8OxVlFR6aPNq5e/68kS2+CMZ+9o66QLPxMgI8DPTKzhDBkBrKHL8tWYJFECDGhWDp3rFEc8w4oAWjjICKCFLulDIxkB9NFHrVVBRgCtdYz0WkLgw4ePyG1XG2xpZ1FHhvRpcenwNsPnTwp8AGVBEaPd5mDhcnGfXZUpWRQ713taUIH8U8kIIE+PyAggTy+0rqREdQf8+dd9YWWwJ5cvHxW/tUq/EZPh4xcgjEPzRvbwdJ8kLL9WE3/58gWhh09g+ZpN2LE7FJ8ND2PSARTKnwcBPouQOlUKwqECAa5GgKGLg7H54CUVylA3Rc2SueExqBHXpFsPX8aghUFcc8gQ3HdMC5TOn9ViKRNW7YN38FmL48gcYFT7KuhStwRXiSM9d2HD/gtcc4gK3qpaEbg51RSVPtq8ZASIFo3uL5ARQPctjrJAMgJEiYVOciLAtsZpXqUQBjYvjwypk3LKwicsGQH4cKWoPxMgI8DPTOgMfwJkBODPmDLIQ2B36BG07DpQqKDWTeth0YzxQjWw5EF7DqJtj8HCdDBD6NVjQbr+0J2MAMLeXj8lJiPAT0johBkErt64jXJ1WpsxU7kpzRrWxtLZk5ULaGak9Vt2otfgcWbOtnxamlQpceXYTs08XGB5xcpHePDoiWHLgK1f/4hc3UH5ysyLyAyK/qvmI1GihOYFoFlGE+BqBGjksgaX7ujv6eJ+DmUxoHk5oyGbM/Ddx88o5+yJN+8/mjNdM3McKhXE9F72Fun9YFjKvkLfpXjxRpy73KICjJjM9vM9NK8b0qZIYsRo84esMpgpJhpMFXo82HLIWya3la40MgJI1xLVBJERQDXUUiUiI4BU7dCtmLiGp90alMuHvg5lYJtFm3v4kRFAt29P6QojI4B0LbEKQWQEsIo2U5H/Ehg5aRY8Vq4TyoOZAJgZQPTBlgm2NayOIPJpwGVzJsOhQW3RKLjlJyMAN7QmByYjgMnIaEIUBBYs88GYKXOjuKLeqXlTx8CxRUP1EkaT6e+Hj1G4olgdwX7LYFe8SDQK6bSxBCIiInDgaBh8N25DQPBeoasmGauZ17im9WuB/W4ietUmXvXJEpebEYDtM17UaSE+h0fIUqtiOhYObAh7O1vF4kUXaIRnCPz2X4zusi7OJ06Y4OsN7hRJzHf9bD18xbB6wk5d8IiuCDVWoWC5T1y5h7aTxO65FB0DS8/bJIiHs4al6xPEj2dpKEXnkxFAUZyaCkZGAE21SzGxZARQDCUFioJAwgTx4VC5ILrVL4lcmVJFMUI7p8gIoJ1eaV0pGQG03kFt6icjgDb7RqrNI1C6VgvcuP2XeZMVmMU+WL54KBAZM6RTIJrlIWo174pTZ8WtxNi2WQMsmDbW8kIkjUBGAHkaQ0YAeXqhZSVNO/RB6JGTQks4f2ArsmbOKFTDt+Rl7FsJ3W9+eH8nDO/f/Zsc+qoAAWYS3BQYAm/DSgEifz9QoBSzQ4wc2BND+/Ldit1scTqZyM0IwPYZZ/uN6/HY594F2dLz37vi2KW7cHTdqEeEkWqydO/2DlM24cgFcf+pjFQMpxfz+9dH3TJ5OUX/X9jX7z6iRI/FYHvX6PEIcG2HgjnSS1UaGQGkaoeqYsgIoCpuaZKREUCaVuhKSOa0ydGu5q9oVa0w99WD1AJHRgC1SFMeMgLQe0AEATICiKBOOUUQYAYAZgQQebA9aA9u8xEpIVLuCdMXYI7Hqkjn1HyRIX1aXDq8TbdP3pERQM13U8y5yAgQMx+6GjuB12/eIo+dPT5++hT7YE4j8tnmxNEgsavafF/akHHTsNxH3P2iUsUKI2Tj8u8l0fcKErhw+TpWrfMH2wbixctXCkaWO1TcuHGxbuks1KxSXm6hGlbHzQjgF3oRI5aEaBhN1NLZk+thHr0MvzBHfV3Js+xebPVBK3D38Uslw0oXq1DO9Ng6uZ1Zuv569AI1Bq/U7Y1rBiVl0kQ4Mt8J7Il2NY6aBp5/PnyuRirVc0zpXgstqxZWPW9MCckIEBMdfV8jI4C++xtddWQEiI4MnTeVANs2qGqxnF9v/lczfGV7vurpICOAnropdy1kBJC7P3pVR0YAvXaW6vqRANsSgG0NIPJw7toOk10GiJQQKfeeA0fRootYPXu3rEKxwvkj6dLLCzICyNNJMgLI0wutKgkM3oeOzsOFyu/ZqTWmjBkkVMP3ybfs2I0u/Vy+P6Xq9+yG7ZVjO5A2tbZXIFQVmhnJ3r17/3WVgBW+m3DqnL5XDP+GJ12a1DgQuFqaFZy+6dLLV25GgEne+7Ey6IxeOP1XR9mC2eAzqvl/r3l/M9vvCOb7H+edRnh8/0ltUSRXBpN1zNpwBAu36JsPe8JvYpcaJrMxd0K/udux4/g1c6dLPa+DfTGM61hNKo1kBJCqHaqKISOAqrilSUZGAGlaoVkhBbKnQ9OKBdG4Yn5kSJVUs3XEJpyMALERoutKESAjgFIkKY4pBMgIYAotGqtlAuyGN7vxLfLYsHy2VE+YvX33DrlK1MKnz5+FYRk1qBcGO3cRlp9nYjIC8KRrWmwyApjGi0b/TGCAixu812/5+YKKZ3yXzESdGpVUzBhzqidPnyF/2XpCH4pcMmsiWjSuE7NQuqoYgdMGI4Cn9wb4b9+F9x8+KhZXxkA1KpcD+72NbetEh7IEuBkB2rn64file8qqlSBal7olMKp9FdWU3H7wHLWHrhL6j7saxZpzszs84guqDlyOB09fqyFRWA6/8a1RPE8m1fIv2noCM9cfVi2fmolK5cuCdWNbqpky1lxkBIgVkW4HkBFAt62NsTAyAsSIhy5GQyB7xpRoUDYfGpbPh/y/yLG/bTRSFTtNRgDFUFKgWAiQESAWQHSZCwEyAnDBSkElI8CeZrO1qy30Q+uENja4GRaCxIkTSUWnXuseOBZ2VpimcnbFsH3tEmH5eSYmIwBPuqbFJiOAabxodGQCbNvaIpUa4e+HjyNfUPFVgvjxccPwMyRZ0iQqZo09VeWGjmBLyIs6Wjeth0UzxotKb7V5H//zDF6+m7F8zUY8fPREtxzmuLmgQ6smuq1PVGFcjABsSftSPRfj5dsPourilnd6L3s4VCrILX5UgVtNWI9T1/6O6pJuziU3bLlw2LD8fWKb+EbXtPfMLXSfsdXo8VocmCtzaoRM76iq9H1nbsNphli3Ja+CkyRKgDOevRFXIlcZGQF4dVv+uGQEkL9HPBSSEYAHVX3GzJM1DWqXsoV9aVsUyZlRlW2pZCJJRgCZuqFvLWQE0Hd/Za2OjACydoZ0KUkgeO8htOkudjnlKuXt4O+9QMmyFInl5u6BGQvE7bEcP348XD0WhFQpkytSj0xByAggTzfICCBPL7So5I9L11ClUXuh0iuULoFA38VCNUSVfJSrOxatWBvVJVXOpU+bGpeObAfbJoAO9Ql8/PQJGwOCsXD5GqGGEF6Vs99NjgVvAHuf0aEcAS5GALanfbXfViinUqJIgW6OYEuyqnn47jmPMcv3qJlSSK7fe9RG8yqFjM7tPDsQwSdvGD1eiwMHtawA5yalVZX+6NkbVOi3VNWcaiYLmtYRtlnk+UFCRgA1uy9XLjICyNUPtdSQEUAt0trLkypZIpQv9AsqFsmOSr9mR7b0KbRXhIKKyQigIEwKFSMBMgLEiIcuciJARgBOYCmsVASGjp+OZav9hGoaO8QZA3t1EqohquShR06iaYc+UV1S7dyKeW5oUq+mavnUSkRGALVIx56HjACxM6IR0RNwX7wSk2YsjH6ACldcfuuJIX26qpDJtBQ79xxAux5DTJuk8Ojdm71Q4ld1H5ZVuATNh2OrZrDtl+Z4eOPgsTDN1/N9AWxFALYyAB3KEeBiBGA3Z9lNWr0dNgni4dxSZ8SPp67bia2swG4Yffj0WW9II9VjyrLtT168RaX+y/A5PCJSDD29YE+t73Xvgqzp1Hdol+vjCcZYj4d7n7poVD6/NKWREUCaVqguhIwAqiOXIiEZAaRogxQisqZLAbv8WVAyX2aUypsF+X5JK9WKNaIhkRFAdAesJz8ZAayn1zJVSkYAmbpBWngRKFHdAX/+dZ9XeKPi7vFfieJFChg1Vs1BHwx7/OYqWVPotgmOLRph3tTRapatSi4yAqiC2agkZAQwChMNioZA/TY9cPSkuC1UmKyQjctRqljhaBSKO/3y1euvW++EC7wvIqtJQlxXxGY+eeYPzFy4Amw1JmYQ0PoRz3D/NTRgNQrms9V6KdLo52IEmLvpKOZuOiZNkUoJKZIrA/wntVUqnElx+s/bju3Hrpk0R4uDg6Z1MDytnSZW6Uu3ncJU3wOxjtPygHKFsmG1S3MhJXSZ5o8D5/4Ukpt3UqcGpTCibSXeaYyOT0YAo1HpbiAZAXTXUqMKIiOAUZh0N4g97V80d8b//2ObCex3ygypkuquTiULIiOAkjQpVkwEyAgQEx26xosAGQF4kaW4shC4duM22E1AkUfa1Klw5dgOaZcubuzoLPQJvkwZ0uPCoQDD9lNxRLZJ8dxkBFAcqdkByQhgNjqrn/j8xSvkK1sHnz+HC2PBlie/djwY7IakjEet5l1x6uwFYdLKlCyKnes9heWnxFETOHvhCqbPWwr2s1DrhoDGdavDa/7UqAulsyYT4GIE6OUeiF1h+luyvVW1wnBzqmUyZCUm7D1zC91nbFUilNQxutYrCRfHyrFqrDPMGzfuP411nJYHTOtpj2aVxSyxM33dIXgEnNQyvmi1Vyj8C1aNbBbtdbUvkBFAbeLy5CMjgDy9UFMJGQHUpK1eLrZaVKY0yfBLhpT4xbCkP/vKlvbP/u/XtCmSqCdGJ5n0ZARgN5rZSk90yEmAGXV2/t5BTnGkSrcEyAig29ZSYf8SYPvWjnabI5SHQ4PaWDZnslANMSWfNm8Zps5ZEtMQ7tf2B3jj14L5uOdRMwEZAdSkHXMuMgLEzIeuRk9g87YQdBsgdsUS2W9CTpi+wLAk/KroIXK+wgwSzCjBDBN0yEfgzB+X4ebugV37D8snzkhFcePGxdGda5Endw4jZ9CwmAhwMQJUHbgC9568jCmvJq+N61QNHWoXE6KdLfVS0bAUvl6Xa/8GlX1QemhuNySIH+/bqZ++hl29j9YTN/x0Xk8nkiRMgKMLuiNJogRCytp29CoGzN8hJDfvpOzD3hOLehpc77wzGRefjADGcdLjKDIC6LGrsddERoDYGck+gj3JP6R1RaRPmQTp2B/D6zTJEyNeXEl+sMgO0Eh9ejICHJ7vRCtAGNl3GkYErIUAGQGspdPWW2ezTv2w79BxoQDmTRkNx5aNhGqIKfmRE2fQoG3PmIZwvzZ2iDMG9urEPY+aCcgIoCbtmHORESBmPnQ1egLOQydg7ebt0Q9Q4cqsSSPQua2DCpnMS7H34DE079zfvMkKzVo+1xVN64t5aFahEnQf5vCJ05gwbQFOnD6vyVq7tW+B6eOHalK7bKIVNwK8ePMBdr08NL/0RFSNWje2Jdg+9qION59QLN9xWlR61fLO7Vcf9cvmjTbfCM8Q+O2/GO11PVxoWqkgZvSyF1bKzb+fwX6oOFch78L3uXf5+qQm7zzGxCcjgDGU9DmGjAD67GtsVVmTEeDRszdfTYxaX44sqp4ON2wx092w1Qwd/AiQEYAfW4pMBIiAeAJkBBDfA1LAj8Cbt++Qx84eHz5+5JfEiMjnQrcgW5ZMRowUM+Tjp0/IVbIW3r17L0aAIWuF0iUQ6LtYWH4eickIwIOqeTHJCGAeN2ufFRERgYLl6+PxP8+Eoji9bzNyZBN3Hyi24t++e4fcJWuD/SwRdTi2aIR5U8Wu3CCqdi3lZZ/Jbd2556sh4PZf97QkHSmSJ8Olw9uQOHEiTemWUaziRoBjl+7C0XWjjLVapIkt53nasxeSJrKxKI4lky/deYJGLj6WhNDE3Eq/ZofX8Kgdd2/efwS7efb2g7gfcmpAXDnCARWLZFcjVZQ5Igw/IIp3X4S37/XJeeHAhrC3s42ydrVPkhFAbeLy5CMjgDy9UFOJNRkBGFc93cz9/n3Cnv5fPqyp0J/V3+vR4/d6eu/QigB6fIdSTUTAMgJkBLCMH82Wm8D2XaFo30vs01t5bXPiWNA6uUEZ1LGnOdlTnaKOBPHj49qJoK8ftIvSoHReMgIoTdT8eGQEMJ+dNc88fe4iajbrIhRB7hzZcHK3/Pe32KoybHUZUUfGDOlw8VCgYdVdWh1RVA9MycsMmguX+2LWQi+8efvWlKlCx9LKE8rgV9wIsGLnabiuDlVGnURRcmZKhV0zxC+X1chlDS7deSwRGeWlMNPFnlmdo3xie93ePzBq2W7lk0oUMXPa5Ng/u4vwvWRbTViPU9f+loiMclL6Ni2DgS3KKxfQgkhkBLAAnsankhFA4w00U761GQE+fgpHS8PPkwu3H5lJTN5pbKsZ/0lto/x9RV7V2lFGRgDt9IqUEgEiYDoBMgKYzoxmaIfAoDFT4eW7WajgVk3qYdSgXkI1GJN8yar1WLBM7AM/K+dPRaO61Y2Rq4kxZASQp01kBJCnF1pSMm3uUkyd6ylUcrOGtTFuaF+hGoxJPn/panh6i90+eX+AN34tmM8YuTRGEgL3HzyCi6s7tu7YI4mimGWw7SeYGYAOywgobgQY5hGMTQcuWaZKwtlsqXq2ZL3oQ083EGJiGd2N2ubj1uHsjQcxTdX8tV6NS2NIqwrC6xjvtRerd50TroOHgOrFc8FzSGMeoU2OSUYAk5HpZgIZAXTTSpMK0dPP8Q3jWqFE3syx1n/7wXM0Ge0LtqqP3o6COdJjvYFDYpv4eitNeD1kBBDeAhJABIgARwJkBOAIl0ILJ1C0ShPcva/vz22EQ1ZQQIdWjTHHbZSCEcWGIiOAWP7fZycjwPc06HtjCdRu3hVhZy8YO5zGCSYwdogzBvYS//CsYAyaTB+89xAGjpqCB4/kfuiYbQ/AVi9iqxjRYT4BxY0Aen1ind2YZTdoRR+PX7xF5f7L8Dk8QrQUrvkzpUlmeCq+K9jSu9+Oq3f/Qf0Rq7+91O3XoGkdYZsltfD69Lz6QobUSXF4npNwxkwAGQGkaIMQEWQEEIJdeFJrNAIw6FsPX8GghTuF8+choFH5/HDvU5dHaKuOSUYAq24/FU8EdE+AjAC6b7HVFnjp6g1UrN/OauvXYuGZM6bHHwcDdLO0MxkB5HkXkhFAnl5oRcmTp89QoFx9RETo+76HVvphjM4KpUsg0HexMUNpjIQE2N+53kMmYHfoEQnV/U/SNl8PlC9d/H8n6DuTCShqBPj0ORxFnRaBfdXbsWxoE1QtllOKspxmbMG+M7el0MJTBHtimz25/e1gW06wrSf0fBSzzYSNE1pLUeL5Ww/hMGatFFp4iDi6oDvSpUzCI7RJMckIYBIuXQ0mI4Cu2ml0MdZqBGCARnruwob9+nT2j2xXGd3qlzT6fUADYydARoDYGdEIIkAEtEuAjADa7R0pj5nA3CXeGD9tfsyD6Kp0BA4E+qBwgTzS6TJHEBkBzKHGZw4ZAfhw1XPUdf47DDclx+u5RN3Vxp7SZk9rs6e26dAmAWa8mTZvKabPX44vX75IWcSIAT0wrF83KbVpRZSiRoBLfz5Go1FrtFK7STqPGG4appfgpiETvf3YNfSft90k/VocXNvOFosGNvwqne0xXNGwEsKzV++0WIrRmsd3qob2tYsZPZ7nwA8G5sWcFup29QlZzD1kBOD5LpY7NhkB5O4PL3XWbAR49/GzwWDmi+v3nvLCKyxu/HhxsXxYU1Qo/IswDXpLTEYAvXWU6iECROB7AmQE+J4Gfa8nAo0dnXHwWJieSrKKWsYP64v+PTroolYyAsjTRjICyNMLrSjp/tsYbAwI1opc0vkvgZULpqJRnerEQ+MENgWGoM+wifjwUb5tPatXKouNXnM1TlisfEWNABtDL2L4khCxFXHInj5lUhxZIMcy4qw8doO2fB9PvHz7gUO18oRkH6qHzumKDKmSWoX5IUH8eDgy3wmpkiWSpglsKwa2JYMej8GG7T56S7DdBxkB9PjuMq4mMgIYx0lvo6zZCMB6yX6mNBu7Fu8NpgC9HamTJ8bmiW2QLX0KvZUmpB4yAgjBTkmJABFQiQAZAVQCTWlUJfDq9RvksbM3rBKqv9/zVAUpIFmlsqWw1WehgMzKpyQjgPJMzY1IRgBzyVnnvHDDNsj5ytbBs+cvrROAhqvu0KoJ5ri5aLgCkv6NwP5Dx+HYexjevpXrYdyUKZLjZliIbrYx+sZbza+KGgEme++HV9AZNfWrkqtK0Rxfn/JSJZmRSUYv34O1e84bOVq7w4a0rohejewM+6j74+D5P7VbiBHK65TOgwUDGhgxUr0hQxYHw//gJfUSqpipXpm8mNe/vooZo05FRoCouVjDWTICWEOXf67R2o0AjMi6vX9g1LLdP8PRwZlCOdNj/dhWSGQTXwfViC2BjABi+VN2IkAE+BIgIwBfvhRdDIGAnXvRqe8IMckpq0UE2NLO108GI3mypBbFkWEyGQFk6ML/ayAjgDy90IKSY2HnUK91dy1IJY0/EMiSKQP+OBjww1l6qVUC+w+fQNvug/D+g1wrA5zauwk5f8mqVazCdStqBGjn6ofjl+4JL0ppAb0MTw0PMTw9LNMRdvU+Wk/cIJMkLlpyZEyFlSMcUGOQFyIk3aNEqcIX/9YItUrlViqcInH0dMPqRyC/ZEiJvbM6/3ha9ddkBFAduTQJyQggTStUFaKnf1c3jGuFEnkzm8VvwPwd2Hb0qllzZZ/UpGIBzOxdR3aZ0usjI4D0LSKBRIAIWECAjAAWwKOp0hIY4OIK7/VbpdVHwmImsGrh72hoXy3mQRq4SkYAeZpERgB5eqEFJZNnLsKsRV5akEoaoyBwaPsaFMxnG8UVOqVFApu3hcBp4Bh8keh+3JolM1C3RmUt4pRCs2JGAPaeKNVzsS6Xq5/brz7ql80rRcO+iWC8aw1ZiT8fPv92Srdfyxv22z1y4S/d1scKS5MiMQ7PcwLbDkGm48jFv9DBbZNMkhTTEidOHIR59ESKJAkVi2lOIDICmENNH3PICKCPPppaBRkB/p/Y63cf0Xj0Gtx5+MJUhJoYP8qxCrrUK6EJrbKKJCOArJ0hXUSACChBgIwASlCkGDIRYB8UF67YCA8ePZZJFmkxgUDH1k0x23WkCTPkHEpGAHn6QkYAeXqhBSXVGnfEuYtXtCCVNEZBYMLwfujXvX0UV+iUVgmMnzYfc5d4SyN/sssAOHdtJ40erQlRzAhw9/FLVPtthdbqN0pvyIxOyJUplVFj1Rw03/84ZvsdUTMl5eJEoKN9cYztWJVTdPPDPn/9Hna9PMwPIPlMn1HNUbZgNqEqyQggFL/Q5GQEEIpfWHIyAvwP/flbD9FqwgbDPrLh/zupk++Ysc9ruAPKFRL7M0bLOMkIoOXukXYiQARiI0BGgNgI0XWtETh/6SqqNuqgNdmk9zsCWTNnxPkD2l/RgYwA3zVV8LdkBBDcAA2lf/DoicFM1lCqp481hE8KqVXK28Hfe4EUWkiEMgQ+ff6Mmg6d8cela8oEtDBKj46tMHXsYAujWO90xYwAIWE30Ns9UHckkyRKgDOevRHX8PSwbAczX1Q3LJkv0xIdsjHSip7Nk9rg11wZpZRbdeAK3HvyUkptlopycayMrvVKWhrGovlkBLAIn6YnkxFA0+0zWzwZASKjW7HjNFx9QiOf1MkrttrP5oltkTVdcp1UpG4ZZARQlzdlIwJEQF0CZARQlzdl40/AffFKTJqxkH8iysCVgB6WdiYjANe3iEnByQhgEi6rHrx6w1b0H+lq1Qy0XrxNggS4ERaCpEkSa70U0v8dgaMnz6JB255S3H9sXLc6vOZP/U4dfWsKAcWMAHM3HcXcTcdMya2JsaXyZcG6sS2l1drO1Q/HL92TVh8Ji51A3mxpsWOqvEvn9DIYfHYZjD56PGTYx5mMAHp8ZxlXExkBjOOkt1FkBIjcUbbVUS/3AOw+dTPyBZ28KpIrA9aOaYlENvF1UpF6ZZARQD3WlIkIEAH1CZARQH3mlJEvgfpteoB9WEyHtglMHNEffZ0cNV0EGQHkaR8ZAeTphexKOvcdga0798ouk/TFQmD14umoX6tKLKPostYItO0xGEF7DgqXXaF0CQT6LhauQ6sCFDMC9J4diJCT+rtZ2L52MYzvVE3a/m7YfwEjPXdJq4+ExU5gWJtK6NGwVOwDBY1gBh9m9NHjkSdrGuz8XezyhWQE0OM7y7iayAhgHCe9jSIjwM8dZdvQNHTxwYOnr3++qIMzTSsVxIxe9jqoRN0SyAigLm/KRgSIgLoEyAigLm/KxpfA8xevkK9sHXzW4XZPfMnJF10PSzuTEUCe9xUZAeTphcxK2PLjeezs8er1G5llkjYjCHRp1wwzJw43YiQN0RKBY2HnUK91d+GSixTMi9CA1cJ1aFWAYkaAar+tAFuqXm+Hm1MttKpWWNqyXr/7iPJ9l+Ldh0/SaiRh0ROIFzcOQud0RcbUyaIfJPjKrrCbX5/WFCyDS3rG/8xSZyQW+KQmGQG4tFYTQckIoIk2KS6SjABRIz1x5R46uG3C5/CIqAdo/OyYDlXRqU5xjVehrnwyAqjLm7IRASKgLgEyAqjLm7LxJeC/fRe69h/FNwlFV4UAW9r5+slgJEuaRJV8PJKQEYAHVfNikhHAPG7WNuvA0TA0ae9sbWXrst7s2TLjzD5/XdZm7UVVauCIi1euC8WQJ1d2HA/ZIFSDlpMrYgR48eYD7Hp5SLFXhNLN8J/UFmxZV5mPwYuCsOXQZZklkrZoCFT6NQe8hjeN5qocp+89eYWqA5fLIYaDCr/xrVE8TyYOkY0LSUYA4zjpcRQZAfTY1dhrIiNA9IwW+B+Hu9+R6Ado+Er8eHGxcoQDyhbMpuEq1JVORgB1eVM2IkAE1CVARgB1eVM2vgT6DJsI303b+Cah6KoR0PrSzmQEUO2tEmsiMgLEiogGGAiMnToX85f6EAudEDgatA75bHPqpBoq4xuBWYu8MHnmom8vhXzN+UtWnNq7SUhuPSRVxAhw7NJdOLpu1AOPSDWwD23PGp4WTpggXqTzsr04eP4O2M1EOrRHYJZzXTSukF964czow5Zu1uMxoXN1ONYqKqw0MgIIQy88MRkBhLdAiAAyAkSPPeLLF3SeuhmHL/wV/SANX0mbIgn8J7VB5rTJNVyFetLJCKAea8pEBIiA+gTICKA+c8rIh0BERAQKVmiAx0+e8klAUVUn0LmtA2ZNGqF6XqUSkhFAKZKWxyEjgOUMrSFChXptcfnaTWso1SpqdB01EL27tNVsrQ8ePQH7U7xIAc3WwEP42QtXUL1JRx6hjY5JRgCjUUU5UBEjwIqdp+G6OjTKBFo+mf+XdNg2xVH6EsIjvqDKgOV4+Eyfe+tK3wAzBSZLbIMjC7oLXZbeWOkdpmzCEZ3emGlVrQjcnGoai0LxcWQEUBypZgKSEUAzrVJUKBkBYsb5+MVbNHLxwRPDVz0ev+bOiLVjWkpvMpWBPRkBZOgCaSACRIAXATIC8CJLcdUmcPr8JdR06Kx2WsrHkcAvWTPh7P4tHDPwDU1GAL58TYlORgBTaFnn2L/uPUCxqk2ss3idVl29Ulls9JqruerY7zOLvdZiy/bdyGub4+te9HHixNFcHbwEhxu28cxevDrevRP3oChtPWFZdxUxAgxfEoKNoRctUyLhbIdKBTG9l72Eyn6WNG3tQSwJDPv5Ap2RlkDLqoUxpXstafV9L8zN5wDYzSs9HmzrD7YFiKiDjACiyIvPS0YA8T0QoYCMALFTZysddZ3mD7ZCgB6PZpULYlpPbfx+KZI/GQFE0qfcRIAI8CZARgDehCm+WgSmz1+OKbM91EpHeVQicGTnWuTPk0ulbMqmISOAsjwtiUZGAEvoWcfc5T4bMWTcNOso1kqqTJTQBjdOhiBx4kTSV8xubm8P2Y9FXr44evJsJL1rPWfBvnrFSOes/UWVRu3xx6VrwjDk+CULTu+lVdHNbYAiRoBGo9bg0p+PzdUg7bxRjlXQpV4JafV9L+za3X9Qb8Tq70/R95ITWDO6BcoUyCq5yv+X53/wMoYsDtKEVlNF2hi2/jhn2AKEbQUi4iAjgAjqcuQkI4AcfVBbBRkBjCM+Y90hLA44adxgDY4a16kaOtQupkHl6kkmI4B6rCkTESAC6hMgI4D6zCkjHwJ1WjrhxOnzfIJTVGEEJrsMgHPXdsLyW5KYjACW0FN2LhkBlOWpx2jteg7Bzt0H9FiaVdck+030l69ew3v9Fnh6b8Cdu39H2atSxQojZOPyKK9Z68kWXQZgz4GjwsrPkys7jodsEJZf64ktNgJ8+hyOok6LwL7q7Vjt0hzlCmXTTFkOY9fi/M2HmtFrzUJ/SZ8Se2Z1hlZWmLlqMJrU17HRJMC1HQrmSC/kLUlGACHYpUhKRgAp2qC6CDICGIecObPbTvbDqWtR/6fMuCjyjmLmM++RzVBaI4ZAESTJCCCCOuUkAkRALQJkBFCLNOXhSeDp8xfIX7Yu2O9tdOiLQLWKZbBp5TxNFkVGAHnaRkYAeXoho5IPHz7CtrQ93r59J6M80mQBge4dWuL3cUMsiMBn6s0/72LJynVYszEQr9/Evh3lmiUzULdGZT5iNBi1Q+9h2GZYQUHUUaRg3q9bNojKr/W8FhsB2EoAbEUAvR1sD5CTi3siZdKEmiltVfBZTFy1TzN6rVloP4eyGNC8nGYQsP/YM8PPh0+fNaPZFKFTe9RGiyqFTJmi2FgyAiiGUnOByAiguZYpIpiMAMZjvP/PKzQ2/I75/LW4PciMV2v6yHQpk3zdmiZTmmSmT7aCGWQEsIImU4lEwIoJkBHAipuvo9L9tgahx6CxOqqISvlGIKGNYWnnsGAkSZz42ynNfCUjgDytIiOAPL2QUQl7spg9YUyH/gjkzpENJ3dvlKaw0CMn4eG1DkF7DyIiwnjzYsF8tl9vPMcTtIqwNAD/FSLaCFDOrhi2r10iGxbN6LHYCLDpwCUM8wjWTMHGCs2WPgX2uXcxdrgU4569eocK/ZbpcnUGKQArJIKZTHbN6IgcGVMpFFGdMHpecaKDfTGM61hNHZA/ZCEjwA9ArOglGQGsqNnflUpGgO9gGPFtSNgNOM/ehi9fvhgxWntDiubOCN8xLZHQsE0NHZEJkBEgMg96RQSIgL4IkBFAX/201mp6DR6P9Vt2WGv5uq9bq09CkhFAnrcmGQHk6YWMSlwmu2Ox11oZpZEmBQic2OUH25y/KBDJvBBsxQm/gGB4rFxr0b727pNHolObpuaJ0NmsNt0HIXjvIWFV1a1ZGWs8ZgjLr/XEFhsBXFeHYsXO01rn8JP+2na2WDSw4U/nZT/Ryz0QuwwfmtMhL4FS+bJg3diW8gqMRtmoZbuxbu8f0VzV9mmRPSEjgLbfO5aoJyOAJfS0O5eMAKb3Tk83hKOqvkXVQpjavXZUl6z6nJ76fni+EzKkSmrV/aTiiQARiEyAjACRedAr7RFgT9QVKFcfT54+0554UmwUgW7tW2D6+KFGjZVpEBkB5OkGGQHk6YWMSkrXaoEbt/+SURppUoDA1LGD0aNjKwUimRbi8ZOnWL5mI5b7bMTjfyz/HSVdmtRf96VPlTK5aUJ0OLp+mx44evKssMo6tGqMOW6jhOXXemKLjQCOrhtx7NJdrXP4ST9btp0t3661I/gke3IuUGuyrUrv5K410aZGEc3V7LPrHMZ57dWcbmMEJ0mUAGc8eyOuYbUGtQ8yAqhNXJ58ZASQpxdqKiEjgOm0P34KR8sJ63Hh9iPTJ2tkxoTO1eFYq6hG1Kojk4wA6nCmLESACIghQEYAMdwpq3IEws5eQO3mXZULSJGkI5Djlyw4vXezdLpiE0RGgNgIqXedjADqsdZaJmYAYEYAOvRLoHa1Cli31F21As9fuorFK9ZiU2AIPnz8qGjezm0dMGvSCEVjajFYieoO+POv+8KkD+3bDSMH9hCWX+uJLTICsFVa7Xp54MUb/e3d6jGoEWqWzK25/n76HI7yfZfqdj9dzTXkB8EJE8THkQVOSJEk4Q9X5H956trfaGW4EaPXI2haR9hmSa16eWQEUB25NAnJCCBNK1QVQkYA83DffvAcTUb74s17Zf9DZ54a5WfFN+w5t9qlOezyZ1E+uEYjkhFAo40j2USACBhFgIwARmGiQRITmDpnCabNWyaxQpKmBIFjQeuQ1zanEqFUi0FGANVQx5qIjACxIrLaAYsN+7W7TJ5ltfVbQ+GJEyfCzZMhSJjQhlu5bHWinXsOfjUAHDwWxi1P3LhxEbhmMdge9dZ6sK0WshWtivDwCGEI5ri5oEOrJsLyaz2xRUaAe09eoerA5VpnEKX+0DldkSWtNpf8GL9yH1aHiFumI0qgdPIrgQbl8mFO33qapPH2/ScU774IETrdp9m9T100Kp9f9d6QEUB15NIkJCOANK1QVQgZAczHvfXwZQxaGGR+AMlnpk+ZFP6T2yBj6mSSK1VHHhkB1OFMWYgAERBDgIwAYrhTVuUI1GrWBafOXVQuIEWSkoDrqN/Qu0sbKbVFJ4qMANGRUf88GQHUZ66VjC26DMCeA0e1Ipd0mknAb8Uc1KhczszZ0U97/eYtVm8IgOeq9bh1R52VyvPkzoHQrd5IlEh7D3dGT9L4K6cNv/PVNPzuJ/LYsnohKpcrJVKCpnNbZATYFXYTvdwDNA0gKvGpkiXCycU9o7qkiXNnbzxE83FrNaHV2kQuHdIE1Yrn1GzZ9kNX4ebfzzSrPybh3RuUwvC2lWIawuUaGQG4YNVEUDICaKJNioskI4BlSEd67sKG/RcsCyLx7GK2meA7ugVsEsSTWKU60sgIoA5nykIEiIAYAmQEEMOdsipDgO25W7B8fbAn8ejQN4Hqlcpio9dcTRVJRgB52kVGAHl6IZOSt+/eIY+dPd4bnjCmQ98EmJGMGcqUOv68e//rzX9mAnj56rVSYY2Oo3Q9RieWYOCiFb4Y5TpbqJILhwKROWN6oRq0nNwiI8DcTccwd5P+3FsVCv+CVSObabmvqDPMGzfuP9V0DXoTz570Ozi3K+IZlv/V6jFg/g5sO3pVq/Jj1C3q7z0ZAWJsi64vkhFA1+2NtjgyAkSLxqgL7z5+hsMYX1y/p9/fcVpVKww3p1pG8dDzIDIC6Lm7VBsRIAJkBKD3gJYJrN28Hc5DJ2i5BNJuJIFEhiWdbxiWdmZLPGvlICOAPJ0iI4A8vZBJyc49B9CuxxCZJJEWTgTYU/THgy3fZvjwidPwMGwnsX3XfqFL07MtAjYaVjmoWrEMJ2Lyhm3ZdSB2hx4RJjBVyuS4GbZLWH49JLbICNB7diBCTt7QA4dINXSrXxIj21WOdE5rLxYHnMSMdYe0JlvXervWKwkXR22/rzwM76vpOn1fiVoJhIwAuv5rH2NxZASIEY9uL5IRwPLWXr37D5qNXYv3BlOAXo+JXWqgXc1f9VqeUXWREcAoTDSICBABjRIgI4BGG0eyvxJwGjgamwJDiIaVEFjrOQv21StqployAsjTKjICyNMLmZQMGTcNy302yiSJtHAkcHrfZuTIlsXsDOzJ/wKGVYjev/9gdgwlJ2bKkB6hgd5Ilya1kmGljvXi5SsUKFcfHz6KW8WjYpmSCFizSGpOsouzyAhQ7bcVuPv4pew1mqxvlnMdNK5QwOR5Mk34+59XqDpwhW73c5eJtbFaAtwcUTB7OmOHSznuwLk/0WWav5TalBC1f3ZXZE2XXIlQRscgI4DRqHQ3kIwAumupUQWREcAoTLEOWrvnD4xevjvWcVodkCB+PKx2aYZS+cz/D7NWa/+mm4wA30jQVyJABPRIgIwAeuyqddQUHh6BfGXr4NlzsZ8Fpk6VArMnu+ge+vxlPjhx+rzQOrt3aInfx2nn6V0yAgh9u0RKTkaASDjoxb8EilVtgr/uPRDKI2WK5BjUu7NQDWokX+y1Fn8/fKxGqmhzzJgwDF0dm0d73ZgLbBUithqRLAfbNmf9stmaXvXZFJZevpsxaMxUU6YoPta5aztMdhmgeFxrCmi2EeDl2w8o1dMDX7580R2vHVPbI2+2tJqvq9PUzTj0xx3N16GHAgrmSI8A13aaL+XJi7co18dT83VEV8DCgQ1hb2cb3WUu58kIwAWrJoKSEUATbVJcJBkBlEOq5+1qGKUMqZLCf1JbZEidVDloGopERgANNYukEgEiYDIBMgKYjIwmSELgWNg51GvdXbiapvVrYflcV+E6eAuYv9QHY6fO5Z0mxvi5smdD2B7tPL1LRoAY26nqRTICqIpbE8kuX7uJCvXaCtfauF4NeM2bIlwHbwEDXNzgvX4L7zQxxq9bszLWeMyIcUxsF0+dvYBazbvGNkzV6706t4Hb6N9UzSkqWbXGHXHu4hVR6b/mXTHPDU3q1RSqQevJzTYCHL98D+0m+2m9/p/0J7KJj7OevXXh6PE/eBlDFgf9VCOdUJ/AKMcq6FKvhPqJOWSs0G8pHj17wyGy+JB9m5bBwBblVRVCRgBVcUuVjIwAUrVDNTFkBFAO9SuDKbXJGF/cefhCuaCSRSqeJxPWjGoBmwTxJFPGXw4ZAfgzpgxEgAiII0BGAHHsKbNlBFxnLcbMhSssC6LA7LlTRqF9y8YKRJI7xNkLV1C9SUfhIk/s8oNtzl+E6zBGABkBjKGkzhgyAqjDWUtZZDA3MV5z3FzQoVUTLaEzS6vf1iD0GDTWrLlKTUqaJAmunwxCQhsbi0LWb9MDR0+etSiG0pMnDO+Hft3bKx1Wqni7Q4+gZdeBwjVdPLwNmTJoe6Vt0RDNNgJ4BZ3BZO/9ovUrnr+YbSZsnNBa8bgiAr778Mnw9PYLNjHKAABAAElEQVRSvHkvbv8OEXXLljN+vLg4OLcb0qVMIps0s/Q4zdiCfWdumzVX9kk1SuTCksHqfphARgDZ3xX89JERgB9bmSOTEUDZ7py/9RCtJmzAp8/hygaWKFrr6kXg2s36nM9kBJDoTUhSiAARUJwAGQEUR0oBVSIgw1NhrNTzB7Yia+aMKlUtLk1ERATylLbH8xevxIkwZJ4yZhB6dtLGZ6VkBBD6VomUnIwAkXDQCwOBJu2dceBomHAW50K3IFuWTMJ18Bbw8NETFKrYUPiK3ptXzUfVCqUtKjdk32G0dpLrCfw4ceJ8/fnYo2Mri2qTdfLHT59QtVEHXLl+S6jEPLlz4HjweqEa9JDcbCPA8CUh2Bh6UQ8MItXQpsavmNy1RqRzWn6h1z5pqSfVi+eC5xB1by7z5DNz/WEs2nqCZwphsdnyy4fnOaman4wAquKWKhkZAaRqh2piyAigPOoVO07D1SdU+cASRZzctSba1CgikSL+UsgIwJ8xZSACREAcATICiGNPmc0nIMsNhfx5cuHIzrXmF6KxmR2dhyMweJ9Q1TWrlMeG5bOFajA2ORkBjCXFfxwZAfgz1lKGV6/fII+dvcHE/1mo7Hy2OXE0aJ1QDWomL1+3jfAbuX2dHDFxRH+Lymbbk9du0Q1smwCZDmYGGDe0D/r36CCTLEW0sK2J2Coeog+n9i0wbfxQ0TI0n99sI0Dj0Wtw8fZjzQP4sYAJXarDsWbRH09r9vXRi3fR3k07e3lpFnQMwuf2q4/6ZfPGMEJbl3Yev4a+c7drS7QJao8u6K7q6g1kBDChOTobSkYAnTXUyHLICGAkKBOGGf4/iF7uAdh96qYJs7Q1NEH8eIYtApqjRN7M2hJugVoyAlgAj6YSASIgPQEyAkjfIhIYBQEfv0D0GzEpiivqnurdpQ1cR8n1VCBPAktWrceIiTN5pog1dqJECXHzZAjYV9kPMgLI0yEyAsjTCxmUBOzci059RwiXYk17uzPYw8ZPx9LVYrf3LpA3Nw7v8LW49/sPHYdDp34Wx+ERwLlr269mh7hx4/IIr3rMzdtC4DRwjPDVJFjhvktmok6NSqoz0FtCs4wAbPnVok6LdLkMq9/41mD7serliDB8Ol79Ny/ce/JSLyVpqo6USRPh8HwnJNTR3r5/PnyOmoNXaqoPpohdPqwpqhTNYcoUi8aSEcAifJqeTEYATbfPbPFkBDAbXYwTn79+j4YuPnjw9HWM47R8ka1a4z+pLTKkSqrlMozWTkYAo1HRQCJABDRIgIwAGmwaSUbnfiOxdcce4STWL3NHraoVhOtQS8DlazdRoV5btdJFm0cr3MkIEG0LVb9ARgDVkUudcICLK7zXbxWuUSv/likFKiDIYMDoI96AodSWPq26/YZd+w8rhUfROPVrVcHimROQLKm2t4dmhou2PQbj/Qfx240nTpwIN04Ea8KIqOibiUMws4wAl+48QSPDh616O+LFjYMznr2ROGECXZU2a8MRLNxyXFc1aaWYtoatJibpaKsJxp09eVmixyK8fif+hwGP98HgVhXQu7Fl+xaZoouMAKbQ0tdYMgLoq5/GVkNGAGNJmT7uxJV76OC2CZ/DI0yfrJEZJQ0rAvgYVgZgKwTo/SAjgN47TPURAesmQEYA6+6/FqtnSznnLV0HL1+JNV0mSmiDG4Yn09kHw9ZysOWQC5Svj8dPngotuWen1l/3QhYqwojkZAQwApJKQ8gIoBJoDaRh/44VrtgIDx6JXV06oY0NboZZ18+Qp89fIF+ZuoiIEPs5yWzXkejYuqnF79ZrN26jUgNH4VtMRFcIW/1g1YKpYPvaa/HYHXoEHQ3GkXfv3kshv1Gd6lhp4EmH5QTMMgJsOnAJwzyCLc8uWQTbLGkQNE1/+3ncevActYfo9wluyd5GkeSsH9cK7EN7vR1tJ/mB3XDR41GvTF7M619ftdLICKAaaukSkRFAupaoIoiMAHwxL/A/Dne/I3yTCI6uR5NhVEjJCBAVFTpHBIiAXgiQEUAvnbSeOg4dP4VG7XoLL7haxTLYtHKecB1qC3AaOBqbAkPUThspn23OX3Bil9jlpSMJiuYFGQGiASPgNBkBBECXNOW5i1dQrXFH4eqs9WcIY896IPJoaF8Nqxb+roiECdMXYI7HKkVi8QjCVgSY7eqCZg1r8wjPLebazdsx0MUNHz994pbD1MBLZ0/WHEdTa1RrvFlGANfVoVix87RaGlXL06h8frj3qataPjUTtZywHqev/a1mSqvPlTNTKoRM74Q4cfSHQk8fzv/YnewZU2LPzM4/nub2mowA3NBKH5iMANK3iItAMgJwwfpfULYlUuepm3H4wl//ndPjN25OtdCqWmE9lvZfTXr6XYNtE2UtWzr810D6hggQgRgJkBEgRjx0UUICsnzoPmF4P/Tr3l5CQnwlrVrnj4GjpvBNYkT0sD0bkSt7NiNGihtCRgBx7H/MTEaAH4lY7+tZi7wweeYi4QCs9WfIaLc5WLh8jVD+yZMlxfWTwYbVDeNbrIM9rc5WBbh1567FsXgGYE+zu44aiGxZ5N6G/P37Dxg7dS6W+Ww0rARtWApakiNpkiS4cmw7kiROLIkibcswywjQ3m0jjl6U+y+aOW0Z1qYSejQsZc5U6ees2X0eY1eI38tNelAKCvytRXn0aVpGwYjyhNqw/wJGeu6SR5CCSuIYnBthHj2RIklCBaNGH4qMANGz0fsVMgLovcNR10dGgKi5KHn20fM3aDxqDZ68eKtkWKli2SSIhzWjWqB4Hrn/Q2kJNDICWEKP5hIBIiA7ATICyN4h0vcjgcoNHXHh8vUfT6v++kCgDwoXyKN6XtEJb/55F3Y1m4uWgd/HDUH3Di2F64hJABkBYqKj7jVZjADp06ZGhTIl1S1eJ9laO9RD3RqVLa6mXuseOBZ21uI4lgaw1p8hwXsPoU33QZbis3h+wJpFqKjQ38WDx06haYc+wrc8iA1KokQJ0cmwJUL/Hh2QOWP62Iarep1tF+EXEAw398W4c1e+B4hbN62HRTPGq8pEz8lMNgIwU4hdLw+8eCPHPhFKNsdruAMq/ZpdyZDSxHrx5gPK9/U0LO0RLo0mPQuJa7iZvGdWZ2RLn0KXZV68/RiNR4t1EvIEy/ZfLltQHZc7GQF4dlLu2GQEkLs/vNSREYAX2chxD56/g67T/MFWCNDrkTF1MvhPbov0KZPoskQyAuiyrVQUESAC/xIgIwC9FbRE4P6DR/i1cmPhT4llzJAOFw8FGlZd1OGyi0a8IYpWaYK79x8YMZLfEPvqFbHWcxa/BApEJiOAAhAVCiGLEUChcqwyzKSR/dGnm6NFtT97/hL5ytZBeLjYPeqt+WfIq9dvYGtXG58/i70vNKBnR4wb2sei99P3k0e5umPRirXfn5L2e5sECdCkfk04tW+B0iV+FaqTvR/WbAzEUu8NuHFb3tU0/b0XoEp5O6Gs9JTcZCPAvSevUHXgcj0x+K+W4wt7IE0K/S410W/uduw4fu2/eukbfgTYTWR2M1mvBzOUFOu+CJ8E/wLBi+8oxyroUq8Er/CR4pIRIBIOq3pBRgCravd/xZIR4D8U3L+Zse4QFgec5J5HZAK7/FngPbKZYXm9eCJlcMlNRgAuWCkoESACkhAgI4AkjSAZRhGQZVn6Ng71sXD6OKM063FQn2ET4btpm9DSEidOhJsnQ5AwoY1QHTElJyNATHTUvUZGAHV588imhBFgU2AInAaO5iHPpJhtmzXAgmljTZqjp8H2Lbrh5Jk/hJZUpGBehAasVkzDhw8fUat5FylWLDKlqIL5bMGedm/ZpK5qqwR8Dg/H/kPHsX7LTmwL2Y+3b9+ZIln1sXltc+LozrVWa/7kAdxkI8CusJvo5R7AQ4vQmOypqkPzugnVwDv5ntO30GPmVt5pKL6BwNQetdGiSiFds2jksgaX7jzWZY1NKhbAzN51VKmNjACqYJYyCRkBpGwLd1FkBOCO+L8E7ImDtpP9cOqafEuc/SdSgW8caxXFhM7VFYgkVwgyAsjVD1JDBIiAsgTICKAsT4rGl0BH5+EIDN7HN4kR0T1mTUDLxnWNGKnPIWs3b4fz0AnCi/NbMQc1KpcTriM6AWQEiI6M+ufJCKA+c6UzKmEE6D1kPNb571BamsnxlsyaiBaN1fms12RxKkyYPHMRZi3yUiFT9CnYij4XDCv7ZDKs8KPUcfXGbdRw6Cz9je2o6o0XLy7siv9q2C6hBMqXLo4yJYsiebKkUQ01+Ry78X/xynUcP3UeJ06fx94Dx/Dk6TOT44iaMMfNBR1aNRGVXpd5TTYCzNt8DHM2HtUdjOrFc8FzSGPd1fV9QZ8NH4hX7LcM/7zU756539cr6vvECRPg6AInJE0kr0NaCTbDl4RgY+hFJUJJFyNvtrTYMbW9KrrICKAKZimTkBFAyrZwF0VGAO6IIyVgK1k1HrVGl1tafV/olO610LJq4e9Paf57MgJovoVUABEgAjEQICNADHDoklQEPn76hDx29nj9RuznSHHjxsWlI9vB9vq21uPe3w+/btEguv7eXdrAddRvomVEm5+MANGiUf0CGQFUR654QkuNAGwP8gLl6gu/Acl+hlw+uh3p0ljvzxD2NLhDp36Kv0dMDThvymg4tmxk6rQYx2/YuhM9B2l/xSD2Ps2RLQvy582F3DmyIVXKFEiZIvn//0me7OvXFIav7Hezl69egy3xz/58+/7Fy1e4c+9vXL95Bzdv38F7w4oJWjyyZ8uM4yEbwLZToEM5AiYbAZxnByL45A3lFEgSqU/TMvitRXlJ1PCT4bo6FCt2nuaXgCJDzafJReL2CjqDyd77RUrgljte3Dg4s9QZiW3ic8vxLTAZAb6RsL6vZASwvp6ziskIoH7fQ8JuwHn2NuH72vKs3CZBPPiObolithl5plE1NhkBVMVNyYgAEVCZABkBVAZO6cwmEHrkJJp2UG4/X3OFFCucH3u3rDJ3um7mla7VQvh+vnly58Dx4PXSMiUjgDytISOAPL0wV4mlRoCwsxdQu3lXc9MrNq/ErwWxe7OXYvG0GOj9+w/IVbIWPnwUe3O4Sb2aWDHPTXGEIyfNgsfKdYrHpYDqE1g8cwJaGbZNoENZAiYbAar/5oW/Hr9QVoUE0eYPaIC6pfNIoISvhIu3H6Px6DV8k1h5dK8RDqhUJLvuKRy/fA/tDEsu6/XwG98axfNk4l4eGQG4I5Y2ARkBpG0NV2FkBOCKN9rgerqpHF2RmdIkg/+ktkiXMkl0QzR1Xk89OzzfCRlSKbPEn6aaSGKJABGIlgAZAaJFQxckIzBmylwsWOYjXNXAXp0wdoizcB2iBQwaMxVevptFy8DpfZu/PrUoXEgUAsgIEAUUQafICCAIvIJpLTUC/D7XE7/PXaqgIvNCDerdGaMH9zZvso5mNXZ0xsFjYUIrSpUyOa4eD0L8ePEU1cGWwm/ZZQD2Hz6haFwKpi6B0iV+xc71nmDbSNChLAGTjAAv335AqZ4eunyias+szsieIaWydCWN1mCkD6789URSddqWxT6E3z+7K9gT5Xo/Xhn+PSip038PWO8mdKkOx5pFubeRjADcEUubgIwA0raGqzAyAnDFG23wj5/C0WLCOjBDpJ6P0vmzwtulmeE/1XE1XyYZATTfQiqACBCBGAiQESAGOHRJKgLl67bBleu3hGva6rMIlcqWFK5DtIDN20LQbcBo0TIwfcJQdHNsIVxHVALICBAVFTHnyAgghruSWS01AtRq1gWnzonfVjbQdzEqlC6hJBpNxpo2bxmmzlkiXPv2tUtQzq6Y4jqePX+JOi274fqtO4rHpoD8CSSIH//ryh1FCubln8wKM5hkBDhheAK4rQ6fAE6eJCFOefQyOE2s4x2wbPspTFlzwDqKVbnKno3sMLR1RZWziktXfZBhhZBH+lshhBFtXb0IXLvV5A6XjADcEUubgIwA0raGqzAyAnDFG2Pw2w+eo8loX7x5L3YpvBhFKnCxfe1iGN+pmgKRxIYgI4BY/pSdCBABvgTICMCXL0VXhsCdu3+jeLWmygSzIErSJElwIyyY9oo1MHz8zzPDftv1hD+gVbdmZazxmGFBV/lNJSMAP7amRiYjgKnE5BtviRGA/XtVsHx9RERECC0sWVL2MyQE7CajtR9HT55F/TY9hGMY7NwFowb14qLj9l/3ULdVdzx6/A+X+BSUH4Hh/Z0wvH93fgmsPLJJRoCVhj3BJ+lwT/DSBbIa9lWV08nK4/356PkbVBmwHJ/Dxf4g5lGb6Jg7f++APFnTiJahWv4+c7Yh6MR11fKpmahIrgxfl1jmnZOMALwJyxufjADy9oanMjIC8KQbe+ythy9j0MKg2AdqfMTvPWqjeZVCmq6CjACabh+JJwJEIBYCZASIBRBdloLAcp+NGDJumnAtdWpUgu+SmcJ1yCKgUgNHXLwi9nOYJEkS48bJYCS0sZEFy386yAjwHwrh35ARQHgLLBZgiRFg7ebtcB46wWINlgaoX6sKVi+ebmkYXcz/+OkTcpeqjbdv3wmtp3iRAtjjv5KbhguXr6Nx+95gKwTQoQ0CpYoVxvZ1S8iww7FdJhkBRniGwG+/+OVclObRqU5xjOlQVemwUsfrNn0L9p+9LbVGrYkrmjsjNk1sozXZFuld4H8c7n5HLIoh62SbBPFwbqkz9+WVyQgg6zuAvy4yAvBnLGMGMgKI78pIz13YsP+CeCEcFSRMEB++Y1qA/W6i1YOMAFrtHOkmAkTAGAJkBDCGEo0RTaBdzyHYuVv8apJTxw5Gj46tROOQJv/ISbPgsXKdcD2bV85D1YplhOv4UQAZAX4kIu41GQHEsVcqsyVGALaNCdvORPQh81YmIti06DIAew4cFZH6v5xs//fLR7YjfTp+D1OevXAFzTr1JTPAf9Tl/SZ1qhTY678K2bNlllekDpSZZARoPHqNLvdW1cNTU6a+FwOPXMXABTtMnUbjYyAwzrAMbwfDcrzWdOw5fQs9Zm7VbckBru1QMEd6rvWREYArXqmDkxFA6vZwE0dGAG5ojQ787sMnOIxdi+v3nho9R4sDM6dNbljZpg3SpkiiRfkgI4Am20aiiQARMJIAGQGMBEXDhBH48OEjbEvbC39qkAE4EbIBtrmyC2MhW+Ltu0LRvtdQ4bKcu7bDZJcBwnX8KICMAD8SEfeajADi2CuV2VwjwOfwcOQrUwfPX7xSSorZccL2bESu7NnMnq+3iXOXeGP8tPnCy1o4fRzaONTnqoOtDNCscz88fqLvz364QuQcPF68uFjrOQs1q5TnnInCG20EYMvIF3VaiI+fwnVHTY2bfbJBe//xM8r3XYpXbz/IJk2TehLEj4fD87ohdfLEmtRvrugHT1+jUv9l5k6Xft5Uw9LKLTgvrUxGAOnfBtwEkhGAG1qpA5MRQI72XPnrCZqPWwf2+5CejzIFs2LViGbcV7fhwZCMADyoUkwiQARkIUBGAFk6QTqiI7D34DE079w/usuqnWdPh53Z569aPi0kevHyFfIYTBrhgrf7zGebE0eDxK9M8GPPyAjwIxFxr8kIII69UpnNNQLIshc9MwAwIwAd/yNw+txF1GzW5X8nBH3XvJE9PN0ncc9+685dtDSsgnDzz7vcc1EC0wm4jhqI3l3amj6RZphMwGgjwOU7T9DQxcfkBLJPYDdwzy3tbdh/Ip7sUhXXN2rZbqzb+4fica0xYG07Wywa2NAaS0cZ5yV4+lLs3kK8wHe0L46xHfluG0JGAF7dkz8uGQHk7xEPhWQE4EHVvJhr9/yB0ct3mzdZQ7PU+FnGAwcZAXhQpZhEgAjIQoCMALJ0gnRER2CUqzsWrVgb3WXVzndq4wD3ySNUy6eVRDUdOuP0+UvC5Z7dvwW/ZM0kXMf3AsgI8D0Nsd+TEUAsfyWym2sEmDRjIdwX89sD3tjaurVvgenjxa+gYqxeNcYxExkzkzFTmcgjTaqUuHJsJ9gT4byPJ0+fGVbSGYbjp87xTkXxTSDQvUNL/D5uiAkzaKglBIw2Amw+eAlDFwdbkkvKuYVypsfWye2k1MZb1Mkr99Fm0gbeaawi/kKDCcDeYAawxkMvN7Kj6l2pfFmwbmzLqC4pdk4v/JIltsEZz96KcbGGQGQEsIYu/1wjGQF+ZiLyzID5O7Dt6FWRElTJPb2XPRwqFVQll1JJyAigFEmKQwSIgIwEyAggY1dI0/cEytRuieu37nx/Ssj3KxdMRaM61YXkljkpW9aZLe8s+pg5cTi6tGsmWkak/GQEiIRD6AsyAgjFr0hyc40AVRq1xx+XrimiwZIgqxdPR/1aVSwJocu5jj2HYsfuUOG1Bfstg13xIqroYFseDRozFb6btqmSj5LETMChQW3DihATETcufyNIzEqs56rRRgA3n1As33Fad2RaVC2Eqd1r664uYwr68gWoOcQLdx6+MGY4jYmGANsOgG0LYI2rSjAkv/sehOe2sGjoaPt0kkQJvt7cjhsnDrdCyAjADa30gckIIH2LuAgkIwAXrGYHZVskNRnjq/vfhRLZxMfaMS1RJFcGs1mpPZGMAGoTp3xEgAioSYCMAGrSplymEmDL6Jaq0dzUaYqPj29YufPa8SCkTJFc8dhaD7g79Ahadh0ovAx2g43daJPpICOAPN0gI4A8vTBXiTlGgL8fPkaRSo3whd14EHgkiB8fN8JCkCxpEoEq5Ey92GsdXCbPEi5ueH8nDO/fXVUdS1atxxi3Ofj0Wd/bRKoK1cRk9WpWgdeCKYZ7afFNnEnDLSFgtBGgvdtGHL2ov700xnSoik51ilvCUNNz5246hrmbjmq6BtHiO9gXw7iO1UTLEJY/4MgV/LZgp7D8vBMHT++I3JlTc0tDRgBuaKUPTEYA6VvERSAZAbhgtSjouZsP0XriBsN/BMMtiiP75Cxpk8N/UlukSZFYdqlf9ZERQBNtIpFEgAiYSYCMAGaCo2mqEPD03oDhE2aokiumJGVKFsXO9Z4xDbHaa2/evkPukrWE38hImiSJ4UZbMGwSJJCmF2QEkKYVICOAPL0wV4k5RgDv9VswwMXN3JSKzatQugQCfRcrFk9PgS5cvo7KDR2Fl1SqWGGEbFyuuo4Tp8+j24DRuHv/geq5rT1h3ZqVsWKeGxLa2Fg7CtXrN9oIYNfLA89fv1ddIO+EvqNboHSBrLzTSBv/r0cvUGPwSuEuPWkBGSFs08Q2KJo7oxEj9Tnkxv2nqDNM/JJ0vOi696mLRuXz8woPMgJwQyt9YDICSN8iLgLJCMAFq8VBVxhWvXI1rH6l96NswWxYNcJBlX34LGVJRgBLCdJ8IkAEZCZARgCZu0PaWnX7Dbv2HxYOYsSAHhjWr5twHbIKqNe6B46FnRUuz997AaqUtxOu45sAMgJ8IyH+KxkBxPfAUgXmGAE6Og9HYPA+S1NbPH/04N4Y1LuzxXH0GICt1pC/bD08efpMaHlsWfgrx3YgbepUqut49vwlBo5yQ0DQXtVzW2vCJvVqwmPWBKnMg9bUC6OMAPf/eYUqA9R35/BuRBzDct+nl/QC29vamo+2k/1w4vI9a0Zgdu22WdIgaFoHs+frYWJ4xBcU774I7z580kM5P9XQvUEpDG9b6afzSp0gI4BSJLUXh4wA2uuZEorJCKAEReVjsFULe87aij2nbykfXLKInQ0rYY02rIgl+0FGANk7RPqIABGwhAAZASyhR3N5Enj//gNy29UG+yr6UHPvYNG1mpN/yuwlmD5/mTlTFZ3T18kRE0f0VzSmJcHICGAJPWXnkhFAWZ4ioplqBPj46RPy2Nnj9Zu3IuRGyrnHfyWKFykQ6Ry9+B+Brv1HwX/7rv+dEPTdklkT0aJxHUHZgdUbthq2SXCX4j0rDIIKidnvCuOH9QUzf9AhhoBRRoDdp24aPhwNEKOQY9bsGVNiz8zOHDNoI/SGfRcwcqn4f/i1QSuyyiGtK6JXI3mcz5HVqfeqxfh1OHNdn8vpVCySHSsNT0/yOsgIwIus/HHJCCB/j3goJCMAD6rKxGQrXzV08cGDp6+VCShxlJm966BJRbk/FCEjgMRvIJJGBIiAxQTICGAxQgrAiUDIvsNo7fQbp+jGh02VMjmuHQ/WxCpGxlel7MgDR8PQpL2zskHNiFYgb24c3uFrxkw+U8gIwIerOVHJCGAONbnmmGoECD1yEk079BFeRLo0qXH56Ha66RhDJ1as2YTBY3+PYYQ6l1o3rYdFM8arkyyaLH/evY9+wyfj4LGwaEbQaXMJsC2EZruORPNG9uaGoHkKETDKCDBv8zHM2XhUoZTyhKlbOg/mD2ggjyBBSl6/+4hyfTzx/uNnQQq0mTZe3DjYP7srMqVJps0CFFQ9dsUerNl9XsGI8oRKlSwRTi7uyU0QGQG4oZU+MBkBpG8RF4FkBOCCVbGgJ67cQwe3TfgcHqFYTBkDJbKJj3VjW6JwzgwyyvuqiYwA0raGhBEBIqAAATICKACRQnAhMHzCDHh6b+AS25SgjevVgNe8KaZMsbqxHz58RK5StaRYveH8ga3ImlmOLTPJCCDPXwUyAsjTC3OVmGoEGDNlLhYs8zE3nWLz2BPm7ElzOqIncOPWHZSu3TL6ASpdSZ82NS4dEW/aiIiIwDKfjZgwfQHevn2nUvX6TlOyaCF4zJwA21zZ9V2oRqozygjQZ842BJ24rpGSjJc5qGUFODcpbfwEHY/8bcFOBBy5ouMKlS+t0q/Z4TWc35PiyivmF9F3z3mMWb6HXwLBkZnhI2u65FxUkBGAC1ZNBCUjgCbapLhIMgIojlTxgAv8j8Pd74jicWULmDVdCvhPaoPUyRPLJu2rHjICSNkWEkUEiIBCBMgIoBBICqM4gVI1muPWnbuKxzU14Bw3F3Ro1cTUaVY33qFjX+w/fEJ43e6TR6JTm6bCdTABZASQog1fRZARQJ5emKvEVCNAuTqtcfXG/7V3HuBRFG0cf0MSEkIXlCJSpSlFepEaukCI0oIUKaFJk/pJACEgRQWkEw29twSkd6T3KghIlS5SAqFDkm8330fIcUlub3f2dmf2P8/jk73dmff9v79ZLvHuvzOX1aZjNm7yj99Rsy/w8KcjoIUq1Kcbt2476qb79S3LZ1GxwgV1z6MkwZVrN6n/sLHS75IdSrqjTwIEvL2SU99ugdStfQvycHdPoAdOGUFAkRGgaq9ZdPX2AyP06ZoztI8fVf0kl645eAm+48Tf1PbHFbzINYVOHpbVdRWo4xf+oYaDF7kqncvzTO1Zj2qUyKNLXhgBdMHKRVAYAbiYJuYiYQRgjpR5wOiYGGo9ajntOXWVeWyzBSz38Qc0q5+/KZfdhRHAbHcL9IAACLAkACMAS5qIxYrA+Yt/U+maTViF0xTnxI7fKFvWzJpiWGHwmCkzafjYEMNLrVezCs2ZYvwS0zIIGAEMvx3iBMAIEIeC2wNnjADy8urFqhj/wJybmxv9uXs1ZXovI7fcXSW8c58htHjFOlelSzRPUM+O1KdL20SvG3Fh++4DsasDHDt5xoj03Ob0rViWfhjch/Lk/IDbGkQV7tAIEPnkORXv+AvFSB+KitZ2T2xHmdJjWXd5XqOiY6hij+l0+/5j0aZZl3pSeienfZMDKYWXpy7xeQv6VNpW4pPAKbH3EW/alejt6l+avmlUTklXp/vACOA0MmEGwAggzFQ6VQiMAE7hMqzz7YjHVD9oAd19+MQwDa5K3LZOMQpqXslV6RTngRFAMSp0BAEQ4JAAjAAcTpoFJE+duYgGDP/Z8Erz5slJ+zcsNlwHDwIOHv2DajUONFxq6lQp6fyhjeTp4WG4FhgBDJ+COAEwAsSh4PbAGSPA9PnLqO/gnwyv9eMCH9LO1cZvT2A4CAUCFoStpq7/Gaagp75dShcvQuuXhOqbREV0+fvQtZt30FjJdHf0j9MqIlhnyIfS8v/B33anOtUqWqdozip1aAQ4eOY6Nft+GWdlOZabIY0P7Z/S3nFHC/X4YeEuCl1z2EIVqy+1UeWPaFT7GuoDCDiy9n/m0vnr9wSsjMi3WC76tbefLrXBCKALVi6CwgjAxTQxFwkjAHOkugXc9ceV2NWS5BUCRG9jv65NfuXzm6pMGAFMNR0QAwIgwJgAjACMgSIcEwINW3enbbv2M4mlJUin1gE0YmBPLSEsM/blq1eUp0QNevTYePPqyvlTqUKZ4oazhxHA8CmIEwAjQBwKbg+cMQIEtO9FG7ftNrxWeTny4P90M1wHDwKuXr9FRSsbvw2Pu3syOndgI6VLq8+2vCzmQt6GZ+rMhbTp9z1CPjCtltH7WTJR76/bUPPG9U1hBlRbhxXGOTQCzN5wjIbN3S4ciwqFc0j7u5tj/yqzwP3r2l367Nt5ZpFjah3zBzSkMgWzmVqjq8X1mrKeVu456+q0LsknrxwiryCiR4MRQA+qfMSEEYCPeWKtEkYA1kT1jTd68W4KWXVI3yQmiC6vcLTku8ZUMMe7JlDzPwkwAphmKiAEBEBABwIwAugAFSE1EXjy9Kn0hXJNev7ihaY4LAYvnvYz1ahSnkUoS8RoGtgz9osJo4vt3qElDenX1WgZ2BrA8Bl4IwBGgDcseD1SagR49uw55SlVk54+fWZ4qctnT6TKn5Y2XAcvAkr4NqRLV64ZLnfGhOHk/1l1w3U4EnDh8lWavWg5LVi2mu5FiLeVuqP6X1+XV97o3KYZNaxfk7ySJ399Gj9NTMChEaB/6GZauv2UiUtQJ61DvRLUL6CCusECj2owcCGdunxb4Aq1l/Z+xjS07efWlEzacwjtDYFpa47QqIU735wQ7Gjf5PaUMa0P86pgBGCOlJuAMAJwM1VMhcIIwBSn7sGioqJjV8Y6cu6m7rmMTpDt3TS0YlgzSpfK22gpsflhBDDFNEAECICATgRgBNAJLMKqJrB+6076skMf1eNZDZQ/TL5weCP5pEjBKqTwcSZPn0+DRk4wvE6zLMeNFQEMvxXiBMAIEIeC2wOlRoAtO/ZS47bfGF5nihTedPHwJnwx6cRM9AgaQXOX/ObECH26Nm9UnyaOGqhPcB2iysbJddK2AQvC1kirKe0j+bMj0Zv878u/TjVq2aQBlS1ZVPRyhavPoRFA1C+Gx3WpQ/XK5RNuQrUWJOoKEFq5xB/fRdovvqdO+8XHz8Pb8e6TV+irUct5k61Y74x+/lSpSA7F/ZV2hBFAKSnx+sEIIN6cKqkIRgAllMzV5/qdSPIbsIAePDb+6Qa9yXxaKDvJv+/ckxlvdhTJCFCteG7y8nTXe/oQXwOBNCm96fu2vhoiYCgIOEcARgDneKG3/gR6f/cDzVwQrn8iBxkqlStJK+ZOdtALl+MTOH7qLFVt0Cr+KUOO3aSHZf7YuZKyZn7PkPyvk8II8JqE8T9hBDB+DrQqUGoE+HboGPp1zhKt6TSPr165PC2Z/rPmOFYKELZqI7XvOcjwkjO9l5H+3L2a5N8lvLV/bt+h8DWbKWz1RjpyXKwHqj083Kly+dLUyK8W1a1RmVKlZP+QJG/zzaveJI0AryQnS5HAKfTiZRSv9SWqe8OPrShP1vSJXrfqhXsPn1L5btNInns0ewLyL6NNP7WinJnT2V+0+Jn7kU+pVOdfhaXQp0l56uRXinl9MAIwR8pNQBgBuJkqpkJhBGCK02XBNh2+QF+PW2OJveAC65agb5sZv2qWSEYAl92oSKSagLzqk7z6ExoIuIoAjACuIo08SgnIewTLewUb3eSl5eUl5tGUE4iOjqa8pWvR/YiHygfp1HP8iKDYJwV1Cq8oLIwAijC5pBOMAC7BrGsSpUYAsywvP2JgL+rUuqmuTEQLfvvfu1SwfF1TfNaxfdVcKlyQ7wd3L1+9TivXbaWV67fS0T9Om4Krs/es/OR/VWl7jTrVKlHt6hUpQ3p8D+YsQzP2T9IIcObKHaoXNN+MujVp8pH2QT0a2tkUTztpKkSnwR3HrqItRy7qFJ3vsMXzZqElg5vwXYSO6iv2mEE370bqmMG40HVK56WJ3T9jLgBGAOZIuQkIIwA3U8VUKIwATHG6NJiVvpj+uUttql8uv0v5vp3MSrzfrh2vXU8ARgDXM7d6RhgBrH4HmKt+eW/nBWGrTSGqdrWKhj9RbgoQTopYs2k7yU8kGt0K5MtN5UsVM1TGlWs3afP2PYZqeJ28lm8Fej9LptcvLfdTftL4wUMxPyO0ymSWKl7Y4Rez8hLp85euMgUS+Yll+clyNOcI/DRpBj2MfOTcIB16+9WuSqWKFdYhsjEh/71zj3YfOEK79kv/7TtM5y7+bUpjgPxvprTEvbT077108SJU5OP82F7DmFtG16xJGgFW7DpDfUI26CrAiODFpC9zl+LL3ETRrz94nrqOX5PodStfGCYtGdrMV5xfSKznUmQTSfZMaWnrmNaskRGMAMyRchMQRgBupoqpUBgBmOJ0aTB5haxGwYvpz8v/ujSvEclSSKZZ2fhYMLtxH6LACGDEzFs3J4wA1p17oyqHEcAo8sgLAiAAAiAAAiAAAiAAAq4nEPEgkk6eOUcnT5+jU7E//6Iz5y6RbKZxRUvp40P58+aijyTTXsF8eahgXuk/6RjmGVfQNz5HkkaAEfN3kvyBtWitefUiFNy6qmhlMatH/qBb3h4g4pH4e+E6A83L04P2TAqktCm9nBlmqb7jlu2lSSsOCFmzvC3EkV86UmoftvMPI4CQt4uiomAEUIRJuE4wAvA9pZdvRVCDgQvp8TPX/I+akbQ+eDctLR8WQOlSeRsiA0YAQ7BbNimMAJadesMKhxHAMPRIDAIgAAIgAAIgAAIgAAKmIPAqKorklWzu3rsfu8VPhLSKyv2IBxTx4OH/XkvmgfsPHvz/+KF0PpKSJ/ektGlSS/+l+t/P1KkpXVr59f/PSa/TvL4W75zcR/5+A82aBJI0ArQcGU57T10Vjsz3batRgG8h4epiWdCQWdto3uYTLENyH6tOGWlp+G7sl4bnHky8AjYekvdQNseSgvFkMTucP6AhlSmYjVk8ORCMAExxchUMRgCupouZWBgBmKE0LNDKPWeo1xTxVsxKCGiFwtlpel9/Q7bTghEgoRnBOb0IwAigF1nETYwAjACJkcF5EAABEAABEAABEAABEAABEAABlgSSNAKU7PSLkE+Fhw8NoCK5rbtHk5Ib6PiFW9Rw8GIlXS3T59fefuRbLJdl6lVT6LV/H1KVnjPVDOVizIDmlahNHbb73cEIwMXU6yISRgBdsJo+KIwApp8iRQL7h26mpdtPKerLe6cO9UpQv4AKLi8DRgCXI7d0QhgBLD39hhQPI4Ah2JEUBEAABEAABEAABEAABEAABCxHIFEjwM27kVSxxwzhgHi4J6NjoZ3JO7mHcLWxLqhm3zl08eZ91mG5jCd/OLh7Qjtyl+4ftMQJxMQQlegYQg+fPE+8E8dX/CsUpNGdajKtAEYApji5CgYjAFfTxUwsjADMUBoa6Onzl/T5d4vo/PV7hupwRXJ56bhxXWpT3bL5XJEuLgeMAHEocOACAjACuAAyUtgQgBHABgdegAAIgAAIgAAIgAAIgAAIgAAI6EQgUSPA1qOXqMOYlTqlNS5s3mwZaN2oFsYJ4Cjz1JUHacySPRwp1k9qW+kp8CDpaXA0xwSaDw+j/aevOe7IYQ893j9gBODwRmAkGUYARiA5CwMjAGcTloTcs1fvxK6e9OzFqyR6iXHJx8uTlgxuQgWyZ3RZQTACuAw1EkkEYATAbeBqAjACuJo48oEACIAACIAACIAACIAACICANQkkagSYtOIAjVu2VzgqDT4tQGM61xKuLj0KuiGtClHlm5kULT/mbfG2aviXVDDHuxanoKz84fN20Mz1R5V15qyXezI3Ojbta0rBcEURGAE4uwkYyoURgCFMjkLBCMDRZCmQumjrSRo4Y4uCnvx3yZ4pLYUHB1C6VN4uKQZGAJdgRpL/E4ARALeCqwnACOBq4sgHAiAAAiAAAiAAAiAAAiAAAtYkkKgRoMv4NbTh4HnhqPT/siK1+6y4cHXpVVCrkeG059RVvcJzEVd++m31iOZcaDWDyPCdp6nfLxvNIEUXDWHBTalonszMYsMIwAwld4FgBOBuypgIhhGACUZTBekxaR2t2feXqTTpJaZikRw0rU8Dko1xejcYAfQmjPjxCcAIEJ8Gjl1BAEYAV1BGDhAAARAAARAAARAAARAAARAAgUSNAFV7zaKrtx8IR2hO/y+o/McfCFeXXgUt33Wa+oaI+6WuEm4wjyih9KbPmSt3qF7Q/DcnBDsKblOVmlcrwqwqGAGYoeQuEIwA3E0ZE8EwAjDBaKogkU+eU4NBC+nKP+L93ZwQ6E71S1Kfpp8mdInpORgBmOJEMAcEYARwAAiXmROAEYA5UgQEARAAARAAARAAARAAARAAARBIgECCRoBHT19QsQ4hFCPgkvCHQjq6bEnTBHhzd+rJs5dUtmsoyT+t2Dzck9HOCe3o3bQ+VixfVc2voqKpSOAUevEyStV4sw9qWrUQDW9XjZlMGAGYoeQuEIwA3E0ZE8EwAjDBaLogJy7+Q02HLqWXr8T83RcfuJubG03oWofqlMkb/zTzYxgBmCNFwCQIwAiQBBxc0oUAjAC6YEVQEAABEAABEAABEAABEAABEACBtwgkaAQ4ePY6NRu27K2u/L/MmiE17Rjflv9CXFyBvCKAvDKAFVuVT3LGLoFrxdq11Nxg4EI6dfm2lhCmHVs4dyZaPjSAmT4YAZih5C4QjADcTRkTwTACMMFoyiAz1x2l4fN3mFIba1E+3p60bEhTypctA+vQcfFgBIhDgQMXEIARwAWQkcKGAIwANjjwAgRAAARAAARAAARAAARAAARAQCcCCRoB5mw8TkPn/K5TSuPCViuem37pVd84AZxm3nPqKrUaGc6pem2yx0tPvNUtm09bEAuODpq2mZb8fkrIypN7utOJaV+TvFoEiwYjAAuKfMaAEYDPedOqGkYArQTNO15eSKvj2JW09egl84pkqCxHpnQULhnj0qb0Yhj1TSgYAd6wwJH+BGAE0J8xMtgSgBHAlgdegQAIgAAIgAAIgAAIgAAIgAAI6EMgQSNA/9DNtHS7eF/idf+iDHX/oqw+JAWOGi19sl3lm5l0426kwFXal5bGx4v2Tm5PXtIXv2jOEZi76TgFz/7duUEc9V41ojkVzJ6RiWIYAZhg5DIIjABcTptm0TACaEZo6gARj55RvaD5dOveI1PrZCWuctGcFNrHj5JJ2wWwbjACsCaKeEkRgBEgKTq4pgcBGAH0oIqYIAACIAACIAACIAACIAACIAACbxNI0AjgP2ghnbwk3rLeU3vWoxol8rzNAK8VEBizZA9NXXlQQU9xurDeC14cMo4rOXT2BgUMW+q4I6c9fuhQgxpW+oiJehgBmGDkMgiMAFxOm2bRMAJoRmj6APIWWy1HhNOrqGjTa2UhsLNfKerdpDyLUDYxYASwwYEXOhOAEUBnwAhvRwBGADskOAECIAACIAACIAACIAACIAACIKADATsjgPyhZZHAKfTiZZQO6YwN+fvPbSjbu2mMFcFp9os371PNvnM4Va9O9uLvGlOJfFnVDbb4qMfPXlCx9iEkryYhYmtV8xP6rlVlJqXBCMAEI5dBYATgcto0i4YRQDNCLgJMXnGAfl62lwutWkW6SasBTOz+GdUu9aHWUDbjYQSwwYEXOhOAEUBnwAhvRwBGADskOAECIAACIAACIAACIAACIAACIKADATsjwNmrd6hu//k6pDI2ZNqU3nQopCPpsHKpsYW5MHvDwYvp+IVbLsxoXCp539vNo7/C/aJhCqr3mU2Xb0VoiGDeoSXzZ6VFgxozEQgjABOMXAaBEYDLadMsGkYAzQi5CCAb4VqPWk57Tl3lQq9WkT7enhQ2pCnlzZZBa6i48TACxKHAgQsIwAjgAshIYUMARgAbHHgBAiAAAiAAAiAAAiAAAiAAAiCgEwE7I8CKXWeoT8gGndIZF7bsR9loXlBD4wQIkHn+5hM0eNY2ASpxXEKPhmWp2+dlHHdEj0QJdJu4ltbtP5fodZ4vpPROTkdDOzHZExlGAJ7vBG3aYQTQxo/X0TAC8Dpzzuu+HfGY6gctoLsPnzg/mMMROTOno/ChAZTGx4uJehgBmGBEEIUEYARQCArdmBGAEYAZSgQCARAAARAAARAAARAAARAAARBIgoCdEWDkgp00fe2RJIbwealtnWIU1LwSn+JNojri0TMq322akNtGxEcsL3G7bWxrbCMRH4qK45CVB2n0kj0qRvIxZONPrSh3lvSaxcIIoBkhtwFgBOB26jQJhxFAEz7uBu888Te1++k3YbfKeXtCqnySk37t7cfEKAcjwNt08VpPAjAC6EkXsRMiACNAQlRwDgRAAARAAARAAARAAARAAARAgDUBOyNAq5HhQi5jOrpTLfKvUIA1P8vF6zp+Da0/eF7ouksXfJ8WDGgkdI2uKG778cuxX364IpcROcZ1qUP1yuXTnBpGAM0IuQ0AIwC3U6dJOIwAmvBxOXj04t0UsuoQl9rViO7iX5p6NiqnZqjNGBgBbHDghc4EYATQGTDC2xGAEcAOCU6AAAiAAAiAAAiAAAiAAAiAAAjoQMDOCFCy0y8kP/ktWlszsjnl/yCjaGW5vJ4tRy5Sx7GrXJ7XlQlHtq9OjSt/7MqUQuaSl0Qu33WakLXJRbWvW4L+06yC5vpgBNCMkNsAMAJwO3WahMMIoAkfl4NfRUXTl98voyPnbnKp31nR8spKk3vUpZol8zg71KY/jAA2OPBCZwIwAugMGOHtCMAIYIcEJ0AABEAABEAABEAABEAABEAABHQgYGMEuHk3kir2mKFDGmNDenl60PFpncnDPZmxQgTILn+YLW8PcO/hUwGqsS8hhZcn7Z0USKlSJLe/iDNOExDli86ECv+0UHaa/e3nCV1y6hyMAE7hEqqzKP8+hrX1pWa+hYWaGz2LgRFAT7rmjX39TiT5DVhADx6LZ7ZNiHpK7+QUFtyUPnz/nYQuKzoHI4AiTOjEiACMAIxAIoxiAjACKEaFjiAAAiAAAiAAAiAAAiAAAiAAAhoI2BgBth69RB3GrNQQzpxDC+fORMuHBphTHIeqvp+7nWZtOMahcseS/crnp7Ff13bcET0UEWj74wraIe2PLGJLl8qbDoV01FwajACaEXIbAEYAbqdOk3AYATTh43rwxkMXqIu0xVJMTAzXdSgVnytLegqXzACpfbyUDrHpByOADQ680JkAjAA6A0Z4OwIwAtghwQkQAAEQAAEQAAEQAAEQAAEQAAEdCNgYASavOEA/L9urQxpjQzapUohGBFYzVoRA2U9dvk0NBi4UqKI3pczs508Vi+R4cwJHmgiIvi/y9nFt6f2MqTUxghFAEz6uB8MIwPX0qRYPI4BqdEIMDJ7zO83deFyIWpQU4VssF4X0qk/JpO0CnG0wAjhLDP21EIARQAs9jFVDAEYANdQwBgRAAARAAARAAARAAARAAARAwFkCNkaArtJTSusPnnc2hun7D/mqCrWoUdT0OnkS+Nm38+iva3d5kuxQ63vpU9LO8e3IPZnzH1Y7DG7RDmv3n6PuE9cKW/3UnvWoRglteyDDCCDs7eGwMBgBHCISsgOMAEJOq+KiXryMokbBi+nPy/8qHsN7x26fl6EeDcs6XQaMAE4jwwANBGAE0AAPQ1URgBFAFTYMAgEQAAEQAAEQAAEQAAEQAAEQcJKAjRHAt/csuvLPAydDmL/7ksFNqHjeLOYXypHC0DWH6YeFuzhS7Fhqh3olqF9ABccd0UMxgUu3IqhGn9mK+/PWUe2XG/HrhBEgPg1rHcMIYK35fl0tjACvSVj352Xpd6O8stLjZy8sAcFNWg1g6jf1qHqJ3E7VCyOAU7jQWSMBGAE0AsRwpwnACOA0MgwAARAAARAAARAAARAAARAAARBQQSDOCPDo6Qsq1iFEuH1L5aVIj4V2Jh9vTxV4MCQxArfvP6aKPaZTVLQ4+9yuG9WC8mbLkFjJOK+CQLS0D/In7afSk2cvVYw2/xB5yeNfe/tpEgojgCZ8XA+GEYDr6VMtHkYA1eiEGrhyzxnqNWWDUDUlVUyqFMkpLDiA8mRNn1Q3m2swAtjgwAudCcAIoDNghLcjACOAHRKcAAEQAAEQAAEQAAEQAAEQAAEQ0IFAnBHg0NkbFDBsqQ4pjA2ZK0t62vRTK2NFCJq97Y8raMeJv4WorlCu92jFsGZC1GK2IpoOXUqH/7phNllM9GRKn4p2T2ynKRaMAJrwcT0YRgCup0+1eBgBVKMTbuC3oZto2fY/hasrsYJyS3+ThwU3pdQ+Xol1sTkPI4ANDrzQmQCMADoDRng7AjAC2CHBCRAAARAAARAAARAAARAAARAAAR0IxBkB5m46TsGzf9chhbEh65bNR+O71jFWhKDZV+09Sz0nrxeiukEtK9NXtT4RohazFTFEel+ZJ72/iNr2T2lPGdL4qC4PRgDV6LgfCCMA91OoqgAYAVRhE3LQ0+cvyX/QIrpw456Q9SVUVLXiuWlqz3okr9jlqMEI4IgQrrMkACMAS5qIpYQAjABKKKEPCIAACIAACIAACIAACIAACICAVgJxRoCgaZtpye+ntMYz3fg+TT+lTvVLmk6XCIKevXhFZbuEkrytBM/Nwz0Z7ZkYSO+kScFzGabVLr+vyO8vorYZ/fypUpEcqsuDEUA1Ou4HwgjA/RSqKgBGAFXYhB109uodajh4Mcl/U1mldf+iLHX/oozDcmEEcIgIHRgSgBGAIUyEUkQARgBFmNAJBEAABEAABEAABEAABEAABEBAI4E4I4D/oIV08tJtjeHMN1zrl3Tmq8hcikQwkFQvkYdCpKfT0PQhIL+vyO8vorY+TcpTJ79SqsuDEUA1Ou4HwgjA/RSqKgBGAFXYhB60aOtJGjhji9A1xi9OXg1AXhVAXh0gqQYjQFJ0cI01ARgBWBNFPEcEYARwRAjXQQAEQAAEQAAEQAAEQAAEQAAEWBCINQJERUVTkcCp9PyleE8j7Z3cnt5Nq37ZbhaQRY5x8Mx1avb9Mq5LnNyjLtUq9SHXNZhZ/POXUVQ0cAq9kt5nRGx1yuSlid0+U10ajACq0XE/EEYA7qdQVQEwAqjCJvyg7hPX0tr954Sv83WBqX28KCy4KeXOkv71KbufMALYIcEJHQnACKAjXIROkACMAAliwUkQAAEQAAEQAAEQAAEQAAEQAAHGBGKNABdv3qeafecwDm18uPfSpaQ9kwKNFyKwgpgYIt/es+jq7QdcVpkulTftle4RTw93LvXzIrpu//kkL38sYsueKS1tHdNadWkwAqhGx/1AGAG4n0JVBcAIoAqb8IMinzwnv4ELuf17Ss0E5cn6TqwZIFWK5AkOhxEgQSw4qRMBGAF0AouwiRKAESBRNLgAAiAAAiAAAiAAAiAAAiAAAiDAkECsEWDDwfPUZfwahmHNEapy0Zw0vW8Dc4gRWMWE8H00IXw/lxW2qF6EhrSuyqV2nkT3DdlIy3ed5kmyYq1u0hLHR37pSPLTjWoajABqqIkxBkYAMebR2SpgBHCWmHX6n7j4DzUdupRevoqyTNE1SuahKT3qkfSr1K7BCGCHBCd0JAAjgI5wETpBAjACJIgFJ0EABEAABEAABEAABEAABEAABBgTiDUCTFy+n8aH7WMc2vhw8r7d8v7daPoSuCKtBlCt92yKkZcH4KyFBQdQ0TyZOFPNn9yZ647S8Pk7+BOuUPGCgY2odIH3Ffa27QYjgC0PK72CEcBKs/2mVhgB3rDAkT0B0X9f2ldM9E2jctTVv7TdJRgB7JDghI4EYATQES5CJ0gARoAEseAkCIAACIAACIAACIAACIAACIAAYwKxRgBR9yWV9+2W9+9G059AwLClaOLL8gAABSFJREFUdOjsDf0TMcwgL0m74ceWDCMiVGIE9v15jVqMCEvsMvfnBzSvRG3qFFNVB4wAqrAJMQhGACGm0ekiYARwGpmlBsieyo5jV9LWo5csU3cyaTmAkF71ybdYLpuaYQSwwYEXOhOAEUBnwAhvRwBGADskOAECIAACIAACIAACIAACIAACIKADgVgjQJ1v59G5a3d1CG9syM2jv6KcmdMZK8Ii2RdvO0kDpm/hqlp5tQh51Qg0/Qk8ePycSnb6hctVI5TQ8a9QkEZ3qqmkq10fGAHskFjmBIwAlplqm0JhBLDBgRcJEIh49IzqBc2nW/ceJXBVzFPy9jrhQwMoV7y/22EEEHOuzVoVjABmnRlxdcEIIO7cojIQAAEQAAEQAAEQAAEQAAEQMBMBt3/uP4rxH7iQbkc8NpMuzVpSeieno6GdSH7KCE1/ApFPnlO5rtPo2YtX+idjkEG+L7aPa0NZMqRmEA0hlBCo0nMmXfv3oZKu3PXJly0DrR3VQpVuGAFUYRNiEIwAQkyj00XACOA0MksOOHj2OrUYHkZR0fxtu6R2wj58/x0KC25K8t/wcoMRQC1JjFNDAEYANdQwRgsBGAG00MNYEAABEAABEAABEAABEAABEAABpQTcdv7xd0y/kI3CGQFK5s9KiwY1VsoB/RgQ+GbyOlq99y8GkfQPUf7jD2hO/y/0T4QMcQQ6j1tNmw5diHst0oGHezI6FtqZvJN7OF0WjABOIxNmAIwAwkylU4XACOAULkt3nrTiAI1bttdSDGqV+pAmda9Lso8XRgBLTb3hxcIIYPgUWE4AjACWm3IUDAIgAAIgAAIgAAIgAAIgAAKGEHCTPpCOCV19WDgjQMuaRWlwqyqGQLVq0u3HL1O7n37jovzRnWqRf4UCXGgVReSE8P00IXyfKOXY1SE/xVg0T2a7845OwAjgiJC412EEEHduk6oMRoCk6OBafALRMTH01ajltPfU1finhT/u1bg8fd2gFIwAws+0uQqEEcBc82EFNTACWGGWUSMIgAAIgAAIgAAIgAAIgAAIGE/ALWja5phtRy8JZwQYGVidGlf52HjCFlIQFRVNFXvMMP295OPtSfsnt6cUXp4Wmh3jS91y5CJ1HLvKeCE6KRjaxpe+rFbY6egwAjiNTJgBMAIIM5VOFQIjgFO4LN9Z3rqrftACuvvwiWVYyNs3/drbj3ac+JvmbDxmmbpRqLEEYAQwlr8Vs8MIYMVZR80gAAIgAAIgAAIgAAIgAAIg4HoCbo2HLI6R9+2WP2gUqf32fTP6OOd7IpXERS0jF+yk6WuPmFrrFxUL0o8da5pao4jibtyNpEqSUUTU1rRqIRrerprT5cEI4DQyYQbACCDMVDpVCIwATuFCZ4nATukLcXnFJXmFAKu0ND5e5Fs8N63YddoqJaNOgwnACGDwBFgwPYwAFpx0lAwCIAACIAACIAACIAACIAACBhBwO3ruZoz8weLLV1EGpNcvZYl8WUnetxvNtQTuRz6lv67ddW1SJ7PlypKe3kuX0slR6M6CwIEz1ylG0C8y0qb0pgLZMzqN6cyVOxTx+JnT48w2wCNZMiqZP6vZZJlaz5FzN4X43Zsrs/Semh7vqUpvtpuSKerK7QdKu5u6n2y4TJUiuak1iiJu27FLdOeBdVYFkOfN29MD7y2i3MAc1OHp4U7F82bhQCkkikJg3tJVFBn5yK4cT+m9L7BlY7vzOAECIAACIAACIAACIAACIAACIAACagj8FxrxzYxkK0yxAAAAAElFTkSuQmCC' + +function MITRE_ATLAS_TM_LOGO () { + return MITRE_ATLAS_TM +} + +export { MITRE_ATLAS_TM_LOGO } diff --git a/src/assets/compass.png b/src/assets/compass.png new file mode 100644 index 00000000..9f8355de Binary files /dev/null and b/src/assets/compass.png differ diff --git a/src/assets/dataHelpers.js b/src/assets/dataHelpers.js new file mode 100644 index 00000000..d730cbb9 --- /dev/null +++ b/src/assets/dataHelpers.js @@ -0,0 +1,141 @@ +/** + * Helper functions for data objects. + * @module dataHelpers + */ + +import pluralize from 'pluralize' + +/** + * Pluralizes a data object type. For use constructing page titles and object routes. + * @example + * // Truncated technique object + * const techniqueObj = { + * id: 'AML.T0000', + * 'object-type': 'technique' + * } + * // Title is 'techniques' + * const techniqueTitle = dataObjectToPluralTitle(techniqueObj) + * + * // Object type field of a data object + * const objectType = 'tactic' + * // Title is 'tactics' + * const title = dataObjectToPluralTitle(objectType) + * + * // Truncated case study object + * const caseStudyObj = { + * id: 'AML.CS0000', + * 'object-type': 'case-study' + * } + * // Title is 'case studies' + * const caseStudyTitle = dataObjectToPluralTitle(caseStudyObj) + * // Title is 'studies' + * const caseStudyTruncatedTitle = dataObjectToPluralTitle(caseStudyObj, true) + * @param {(object|string)} objectType - Data object or object type string + * @param {boolean} [returnLastWordOnly=false] - Whether to return only the last word of the pluralization + * @returns {string} A pluralization of the data object type + */ +export function dataObjectToPluralTitle ( + objectType, + returnLastWordOnly = false +) { + // Check if an object was passed as the arg, otherwise use the type as-is + if (typeof objectType === 'object' && 'object-type' in objectType) { + objectType = objectType['object-type'] + } + // Replace any dashes with spaces, i.e. case-study > case study + const tokens = objectType.split('-') + // Pluralize the last word + const lastWordIndex = tokens.length - 1 + const pluralLastWord = pluralize(tokens[lastWordIndex]) + + // Return just the last word if requested + if (returnLastWordOnly) { + return pluralLastWord + } + + // Otherwise return entire plural string with spaces + tokens[lastWordIndex] = pluralLastWord + return tokens.join(' ') +} + +/** + * Singularizes a string. + * @example + * // Plural string + * const pluralString = 'techniques' + * // Singular string is 'technique' + * const singularString = stringToSingular(pluralString) + * + * @param {string} pluralString - Plural string + * @returns {string} A singularization of the string + */ +export function stringToSingular(pluralString) { + // Replace any dashes with spaces, i.e. case-studies > case studies + const tokens = pluralString.split('-') + // Singularize the last word + const lastWordIndex = tokens.length - 1 + const singularLastWord = pluralize.singular(tokens[lastWordIndex]) + // Replace the last word with its singular form + tokens[lastWordIndex] = singularLastWord + // Join the tokens back together with dashes + return tokens.join('-') +} + + +/** + * Generates a URL route to the provided data object. + * @example + * // Truncated case study object + * const caseStudyObj = { + * id: 'AML.CS0000', + * 'object-type': 'case-study' + * } + * // Route is '/studies/AML.CS0000' + * const caseStudyRoute = dataObjectToRoute(caseStudyObj) + * + * // Truncated technique object + * const techniqueObj = { + * id: 'AML.T0000', + * 'object-type': 'technique' + * } + * // Route is '/techniques/AML.T0000' + * const techniqueRoute = dataObjectToRoute(techniqueObj) + * @param {object} obj - Data object + * @returns {string} Route portion of the URL to the data object + */ +export function dataObjectToRoute (obj) { + // Construct each route as a pluralization of the object type (last word) and the object ID + // i.e. studies for case-study, techniques for technique + const pluralLastWordOfObjectType = dataObjectToPluralTitle(obj, true) + return `/${pluralLastWordOfObjectType}/${obj.id}` +} + +export function isJavascriptObject (value) { + // Note that arrays and null are also typed as object + return typeof value === 'object' && !Array.isArray(value) && value != null +} + +/** + * Returns True if the argument represents an ATLAS data object. + * + * @param {object} value + */ +export function isDataObject (value) { + return ( + isJavascriptObject(value) && 'object-type' in value && !('use' in value) // Can occur with technique use in mitigations + ) +} + +/** + * Returns True if the argument represents an array of ATLAS data objects. + * + * @param {object} value + */ +export function isDataObjectArray (value) { + if (Array.isArray(value)) { + // Check if it's an array of data objects + return value.every(v => isDataObject(v)) + } + + return false +} diff --git a/src/assets/events/blackhat.jpg b/src/assets/events/blackhat.jpg new file mode 100644 index 00000000..b1e4a2a3 Binary files /dev/null and b/src/assets/events/blackhat.jpg differ diff --git a/src/assets/events/defcon.jpg b/src/assets/events/defcon.jpg new file mode 100644 index 00000000..24a6fa1a Binary files /dev/null and b/src/assets/events/defcon.jpg differ diff --git a/src/assets/events/network.jpeg b/src/assets/events/network.jpeg new file mode 100644 index 00000000..bc9b41f8 Binary files /dev/null and b/src/assets/events/network.jpeg differ diff --git a/src/assets/events/rsa.jpg b/src/assets/events/rsa.jpg new file mode 100644 index 00000000..0dfbe5d5 Binary files /dev/null and b/src/assets/events/rsa.jpg differ diff --git a/src/assets/fonts/TradeGothicLTPro-Bold.otf b/src/assets/fonts/TradeGothicLTPro-Bold.otf new file mode 100644 index 00000000..1d8187ab Binary files /dev/null and b/src/assets/fonts/TradeGothicLTPro-Bold.otf differ diff --git a/src/assets/global.css b/src/assets/global.css new file mode 100644 index 00000000..98dd911f --- /dev/null +++ b/src/assets/global.css @@ -0,0 +1,22 @@ +body { + background-color: #424242; +} + +a { + text-decoration: none; + color: #1976d2; +} + +p { + margin-bottom: 1rem; +} + +ol, ul { + padding-left: 24px; + padding-right: 0px; +} + +.home-panel { + padding-top: 7em !important; + padding-bottom: 7em !important; +} \ No newline at end of file diff --git a/src/assets/graphics/MITRE_ATLAS_light.svg b/src/assets/graphics/MITRE_ATLAS_light.svg new file mode 100644 index 00000000..81c9a579 --- /dev/null +++ b/src/assets/graphics/MITRE_ATLAS_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/graphics/MITRE_ATLAS_logo_stacked.svg b/src/assets/graphics/MITRE_ATLAS_logo_stacked.svg new file mode 100644 index 00000000..1846bf79 --- /dev/null +++ b/src/assets/graphics/MITRE_ATLAS_logo_stacked.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 00000000..73961b97 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/assets/matrix.css b/src/assets/matrix.css new file mode 100644 index 00000000..0bde7bd3 --- /dev/null +++ b/src/assets/matrix.css @@ -0,0 +1,296 @@ +/*COLORS*/ +/** + * Colors used across the website. + * For each color-pair: + * - "color" refers to the color itself + * - "on-color" refers to the most readable text-color to appear on top of the color. + * Note: some colors don't define on-colors. This is because, for these colors, they aren't intended to + * appear with inner content. For example, "link" is only intended to be used for link text, which inherently + * cannot have inner text. + */ +.deemphasis { + color: #6b7279; +} + +.matrix-header { + background-color: gray; + color: white; +} + +.bg-alternate { + background-color: #f2f2f2 !important; +} + +/******/ +.matrix-container { + border: 1px solid #dfdfdf; + background: white; +} +.matrix-container + .matrix-container { + margin-top: to-rem(16); +} +.matrix-container .matrix-border { + border-left: 1px solid #dfdfdf; + padding-left: 0.5rem; + display: flex; + justify-content: center; + align-items: center; +} +.matrix-container .matrix-title { + border-bottom: 1px solid #dfdfdf; + margin-bottom: 1rem; + padding-bottom: 0.5rem; +} +.matrix-container .scroll-indicator-group { + white-space: nowrap; + display: flex; +} +.matrix-container .scroll-indicator-group .matrix-scroll-box { + flex-grow: 1; + display: inline-block; +} +.matrix-container .scroll-indicator-group .scroll-indicator { + width: 0px; + display: inline-block; + position: relative; +} +.matrix-container .scroll-indicator-group .scroll-indicator .cover { + width: 50px; + height: 100%; + position: absolute; + pointer-events: none; +} +.matrix-container .scroll-indicator-group .scroll-indicator.right .cover { + right: 0; +} +.matrix-container .scroll-indicator-group .scroll-indicator.right.show .cover { + background: linear-gradient(to right, rgba(255, 255, 255, 0.001), white); +} +.matrix-container .scroll-indicator-group .scroll-indicator.left .cover { + left: 0; +} +.matrix-container .scroll-indicator-group .scroll-indicator.left.show .cover { + background: linear-gradient(to left, rgba(255, 255, 255, 0.001), white); +} + +.matrix { + white-space: normal; + line-height: 14px; +} +.matrix.side .tactic { + padding: 2px; + width: 1%; + vertical-align: top; +} +.attack-and { + color: red; + font-size: 12px; + font-weight: normal; + vertical-align: super; +} +.matrix.side .tactic.name, .matrix.side .tactic.count { + text-align: center; + font-size: 16px; +} +.matrix.side .tactic.name { + font-weight: bold; +} +.matrix.side .tactic.count { + font-size: 13px; + border-bottom: 1px solid black; + padding-bottom: 5px; + margin-bottom: 5px; +} +.matrix.side .tactic .techniques-table { + border-collapse: collapse; + width: 100%; +} +.matrix.side .tactic .techniques-table tr, .matrix.side .tactic .techniques-table td { + padding: 0; +} +.matrix.side .tactic .techniques-table tr { + height: 1px; +} +.matrix.side .tactic .supertechnique { + border-collapse: collapse; + width: 100%; + padding: 0; + margin: 0; +} +.matrix.side .tactic .supertechnique td { + padding: 0; + vertical-align: top; +} +.matrix.side .tactic .supertechnique td.technique { + outline: 1px solid #6b7279; + outline-offset: -1px; +} +.matrix.side .tactic .subtechniques { + display: flex; + flex-direction: column; + height: 100%; + margin-left: -1px; + border-left: 2px solid #6b7279; + outline: 1px solid #6b7279; + outline-offset: -1px; + white-space: nowrap; + vertical-align: top; +} +.matrix.side .tactic .subtechniques.hidden { + display: none; +} +.matrix.side .tactic .subtechniques .subtechnique { + height: 100%; + flex-grow: 1; +} +.matrix.side .tactic .handle { + text-align: center; + vertical-align: middle; + transform: rotate(-90deg); + color: #f2f2f2; + width: 12px; + height: 12px; + font-size: 16px; + line-height: 12px; +} +.matrix.side .sidebar { + min-width: 8px; + width: 12px; + padding: 0; + background: #6b7279; + cursor: pointer; + position: relative; + vertical-align: middle; +} +.matrix.side .sidebar .angle { + display: none; +} +.matrix.side .sidebar.expanded .angle { + margin: 0 auto; + height: 12px; + display: block; + position: absolute; + background: white; +} +.matrix.side .sidebar.expanded .angle svg { + fill: #6b7279; + vertical-align: baseline; +} +.matrix.side .sidebar.expanded .angle.top { + top: 0px; +} +.matrix.side .sidebar.expanded .angle.bottom { + bottom: 0px; +} +.matrix.flat .tactic { + margin-right: 5px; + width: 1%; + vertical-align: top; +} +.matrix.flat .tactic.name, .matrix.flat .tactic.count { + text-align: center; + font-size: 16px; +} +.matrix.flat .tactic.name { + font-weight: bold; +} +.matrix.flat .tactic.count { + font-size: 13px; + border-bottom: 1px solid black; + padding-bottom: 5px; + margin-bottom: 5px; +} +.matrix.flat .tactic .subtechniques-row.hidden { + display: none; +} +.matrix.flat .tactic .supertechnique { + border-collapse: collapse; + width: 100%; + padding: 0; + margin: 0; +} +.matrix.flat .tactic .supertechnique td { + padding: 0; + vertical-align: top; +} +.matrix.flat .tactic .supertechnique td.sidebar.technique { + min-width: 8px; + width: 12px; + padding: 0; + background: #6b7279; + cursor: pointer; + vertical-align: middle; +} +.matrix.flat .tactic .supertechnique td.sidebar.technique .handle { + text-align: center; + vertical-align: middle; + transform: rotate(-90deg); + color: #f2f2f2; + width: 12px; + height: 9px; + font-size: 16px; + line-height: 12px; +} +.matrix.flat .tactic .supertechnique td.sidebar.subtechniques svg { + fill: #6b7279; + vertical-align: baseline; +} +.matrix.flat .tactic .supertechnique td.sidebar { + border-right: 2px solid #6b7279; +} +.matrix.flat .tactic .supertechnique td.technique { + outline: 1px solid #6b7279; + outline-offset: -1px; +} +.matrix.flat .tactic .more-icon { + transition: all ease 0.125s; + vertical-align: top; + transform: scale(0.5) rotate(-90deg); + width: 12px; + height: 12px; +} +.matrix.flat .tactic .more-icon.expanded { + transform: scale(0.5); +} +.matrix .technique-cell { + height: 100%; + display: flex; + align-items: center; + font-size: 13px; + line-height: 14px; + outline: 1px solid transparent; + outline-offset: -1px; +} +.matrix .technique-cell a { + display: block; + width: 100%; + height: 100%; + padding: 7px 3px; +} +.matrix .technique-cell:not(.colored):not(.supertechniquecell) { + outline-color: #dfdfdf; +} + +.matrix-controls { + margin: auto; + width: 50%; + padding: 1rem; +} +.matrix-controls button { + border-color: #dfdfdf; + background: white; + color: #39434C; +} +.matrix-controls button:hover { + background: whitesmoke; +} +.matrix-controls .layout-button:active { + color: #16181b; + background-color: #f8f9fa; +} + +.center-controls .matrix-controls .btn-toolbar { + justify-content: center; +} + +/*# sourceMappingURL=matrix.css.map */ diff --git a/src/assets/matrix.png b/src/assets/matrix.png new file mode 100644 index 00000000..d43a6a05 Binary files /dev/null and b/src/assets/matrix.png differ diff --git a/src/assets/mitre-logo-white.svg b/src/assets/mitre-logo-white.svg new file mode 100644 index 00000000..e0f8cb7e --- /dev/null +++ b/src/assets/mitre-logo-white.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + diff --git a/src/assets/nav-layer-icon.png b/src/assets/nav-layer-icon.png new file mode 100644 index 00000000..90f86cd9 Binary files /dev/null and b/src/assets/nav-layer-icon.png differ diff --git a/src/assets/powerpointFunctions.js b/src/assets/powerpointFunctions.js new file mode 100644 index 00000000..655edfb7 --- /dev/null +++ b/src/assets/powerpointFunctions.js @@ -0,0 +1,489 @@ +import Pptxgen from 'pptxgenjs' +import { MITRE_ATLAS_TM_LOGO } from '@/assets/base64_atlas_logo' +import { formatCaseStudyIncidentDate } from '@/assets/tools.js' + +/** + * Makes powerpoint using the study information. + * @param {Object} study + * @param {String} filename + */ +export function makePPT (study, filename) { + const ppt = new Pptxgen() + ppt.layout = 'LAYOUT_16x9' + // Slide layout with just title + ppt.defineSlideMaster({ + title: 'Content', + background: { color: 'FFFFFF' }, + objects: [ + { + placeholder: { + options: { + name: 'title', + type: 'title', + x: 0.5, + y: 0.5, + w: '100%', + align: 'left', + fontFace: 'Arial', + fontSize: 24, + color: '0D2F4F', + isTextBox: true + }, + text: 'Title' + } + }, + { + image: { + x: '5%', + y: '93%', + w: 1.2, + h: 0.18, + data: MITRE_ATLAS_TM_LOGO() + } + }, + + { + text: { + text: '© 2024 THE MITRE CORPORATION. ALL RIGHTS RESERVED.', + options: { + y: '95%', + w: '100%', + align: 'center', + fontFace: 'Arial', + fontSize: 8, + color: '0D2F4F' + } + } + } + ], + slideNumber: { x: '95%', y: '93%', fontFace: 'Arial', fontSize: 8, color: '0D2F4F' } + }) + + titleSlide(ppt, study) + detailSlide(ppt, study) + procedureSlide(ppt, study) + // Create reference slide if references exist + if (Array.isArray(study.references) && study.references.length > 0) { + referenceSlide(ppt, study) + } + + // Use case study title if no argument provided + if (typeof filename === 'undefined') { + filename = study.name + } + + ppt.writeFile({ fileName: `${filename}.pptx` }) +} + + +/** + * Builds the title slide using the yaml + * @param {Pptxgen} ppt + * @param {Object} yaml + */ +function titleSlide (ppt, yaml) { + let textLabel = 'ATLAS Case Study' + if (yaml['case-study-type']) { + const type = yaml['case-study-type'] + textLabel += ' - ' + type.slice(0, 1).toUpperCase() + type.slice(1, type.length) + } + ppt.defineSlideMaster({ + title: 'Title', + background: { color: 'FFFFFF' }, + objects: [ + { + image: { + x: '42%', + y: '15%', + w: 1.5, + h: 0.22, + data: MITRE_ATLAS_TM_LOGO() + } + }, + { + placeholder: { + options: { + name: 'title', + type: 'title', + y: '25%', + w: '100%', + h: 2, + align: 'center', + valign: 'middle', + fontFace: 'Arial', + fontSize: 36, + color: '0D2F4F', + isTextBox: true + }, + text: 'Title' + } + }, + { + text: { + text: textLabel, + options: { + y: '78%', + w: '100%', + align: 'center', + fontFace: 'Arial', + fontSize: 14, + color: '0D2F4F', + isTextBox: true + } + } + }, + + { + placeholder: { + options: { + name: 'incidentDate', + type: 'body', + y: '82%', + w: '100%', + align: 'center', + fontFace: 'Arial', + fontSize: 14, + color: '0D2F4F', + isTextBox: true + }, + text: 'Incident Date' + } + }, + { + placeholder: { + options: { + name: 'involved', + type: 'body', + y: '88%', + w: '100%', + align: 'center', + fontFace: 'Arial', + fontSize: 14, + color: '0D2F4F', + isTextBox: true + }, + text: 'Target | Actor | Reporter' + } + } + ] + }) + + // Convert incident date to a locale date string, + // depending on specified date granularity + const formattedDate = formatCaseStudyIncidentDate(yaml) + + // Workaround for erroneous list item, TBD removal + let reporter = yaml.reporter + if (Array.isArray(reporter)) { + reporter = reporter[0] + } + + ppt + .addSlide({ masterName: 'Title' }) + .addText(yaml.name, { placeholder: 'title' }) + .addText( + [ + { + text: 'Actor: ' + }, + { + text: yaml.actor ? yaml.actor : 'Unknown', + options: { + bold: true + } + }, + { + text: ' | Target: ' + }, + { + text: yaml.target ? yaml.target : 'Unknown', + options: { + bold: true + } + }, + { + text: yaml.reporter ? ' | Reporter: ' : '' + }, + { + text: yaml.reporter ? yaml.reporter : '', + options: { + bold: true + } + } + ], + { + placeholder: 'involved' + } + ) + .addText(formattedDate, { placeholder: 'incidentDate' }) +} + + +/** + * Adds a summary slide using the yaml + * @param {Pptxgen} ppt + * @param {Object} yaml + */ +function detailSlide (ppt, yaml) { + ppt.defineSlideMaster({ + title: 'Summary', + background: { color: 'FFFFFF' }, + objects: [ + { + placeholder: { + options: { + name: 'title', + type: 'title', + x: 0.5, + y: 0.5, + w: '100%', + h: 1, + align: 'left', + fontFace: 'Arial', + fontSize: 24, + color: '0D2F4F', + isTextBox: true + }, + text: 'Title' + } + }, + { + placeholder: { + options: { + name: 'content', + type: 'body', + x: 0.5, + y: 1.2, + w: 9, + h: 4, + align: 'left', + fontFace: 'Arial', + fontSize: 12, + color: '0D2F4F', + isTextBox: true, + lineSpacingMultiple: 1.15 + }, + text: 'Content' + } + }, + { + image: { + x: '5%', + y: '93%', + w: 1.2, + h: 0.18, + data: MITRE_ATLAS_TM_LOGO() + } + }, + + { + text: { + text: '© 2024 THE MITRE CORPORATION. ALL RIGHTS RESERVED.', + options: { + y: '95%', + w: '100%', + align: 'center', + fontFace: 'Arial', + fontSize: 8, + color: '0D2F4F' + } + } + } + ], + slideNumber: { x: '95%', y: '93%', fontFace: 'Arial', fontSize: 8, color: '0D2F4F' } + }) + + ppt.addSlide({ masterName: 'Summary' }) + .addText('Summary', { placeholder: 'title' }) + .addText(yaml.summary, { placeholder: 'content' }) +} + + +/** + * Gets the url from from some object type + * @param {Object} infoObject + * @returns {String} + */ +function getUrlFromInfoObject (infoObject) { + const baseUrl = window.location.origin + if(infoObject.label.startsWith('Technique not found')) { + return baseUrl + } + return `${baseUrl}/${infoObject['object-type']}s/${infoObject.id}` +} + + + +/** + * Links text to a given url + * @param {String} text + * @param {String} url + * @returns {Object} + */ +function linkText (text, url) { + return { text, options: { hyperlink: { url }, fontFace: 'Arial', fontSize: 10 } } +} + + +/** + * Builds procedure slides using the yaml + * @param {Pptxgen} ppt + * @param {Object} yaml + */ +function procedureSlide (ppt, yaml) { + const rows = [ + [ + { + text: '#', + options: { + fill: '005B94', + color: 'ffffff', + align: 'center', + bold: true, + fontFace: 'Arial', + fontSize: 10 + } + }, + { + text: 'Technique', + options: { + fill: '005B94', + color: 'ffffff', + align: 'center', + bold: true, + fontFace: 'Arial', + fontSize: 10 + } + }, + { + text: 'Description', + options: { + fill: '005B94', + color: 'ffffff', + align: 'center', + bold: true, + fontFace: 'Arial', + fontSize: 10 + } + } + ] + ] + + for (let i = 0; i < yaml.procedure.length; i++) { + const description = yaml.procedure[i].description + const techniqueInfo = yaml.procedure[i].techniqueObject + + const row = [ + { text: i + 1, options: { fontFace: 'Arial', fontSize: 10, align: 'center' } }, + linkText( + techniqueInfo.label, + getUrlFromInfoObject(techniqueInfo) + ), + { text: description, options: { fontFace: 'Arial', fontSize: 10 } } + ] + rows.push(row) + } + + + ppt.defineSlideMaster({ + title: 'Procedure', + background: { color: 'FFFFFF' }, + objects: [ + { + image: { + x: '5%', + y: '93%', + w: 1.2, + h: 0.18, + data: MITRE_ATLAS_TM_LOGO() + } + }, + + { + text: { + text: '© 2024 THE MITRE CORPORATION. ALL RIGHTS RESERVED.', + options: { + y: '95%', + w: '100%', + align: 'center', + fontFace: 'Arial', + fontSize: 8, + color: '0D2F4F' + } + } + } + ], + slideNumber: { x: '95%', y: '93%', fontFace: 'Arial', fontSize: 8, color: '0D2F4F' } + }) + const slide = ppt.addSlide({ masterName: 'Procedure' }) + slide.addText('Procedure', { + x: 0.5, + y: 0.5, + w: '100%', + h: 1, + align: 'left', + valign: 'top', + fontFace: 'Arial', + fontSize: 24, + color: '0D2F4F', + isTextBox: true + }) + // the latest pptxgenjs errors here, need to revert to 3.7.1 to work. Issue below: + // https://github.com/gitbrent/PptxGenJS/issues/1005 + slide.addTable(rows, { + y: 1, + colW: [0.5, 2.6, 5.7], + w: 11, + color: '0D2F4F', + autoPage: true, + autoPageRepeatHeader: true, + autoPageLineWeight: -0.2, + autoPageCharWeight: -0.2, + newSlideStartY: 0.4, + // verbose: true, + border: { color: 'D4D4D3' }, + margin: 10 + }) +} + + + +/** + * Builds the reference slides using the yaml + * @param {Pptxgen} ppt + * @param {Object} yaml + */ +function referenceSlide (ppt, yaml) { + const slide = ppt.addSlide({ masterName: 'Content' }) + .addText('References', { placeholder: 'title' }) + + const texts = [] + + yaml.references.forEach((ref) => { + const hasText = 'title' in ref && ref.title !== null && ref.title !== '' + const hasUrl = 'url' in ref && ref.url !== null && ref.url !== '' + + if (hasText && hasUrl) { + texts.push({ + text: JSON.parse(JSON.stringify(ref.title)), + options: { hyperlink: { url: ref.url, tooltip: ref.url }, color: '0D2F4F', fontFace: 'Arial', fontSize: 12, bullet: { type: 'number' }, paraSpaceAfter: 10, breakLine: true } + }) + } else if (hasText) { + texts.push({ + text: JSON.parse(JSON.stringify(ref.title)), + options: { color: '0D2F4F', fontFace: 'Arial', fontSize: 12, bullet: { type: 'number' }, paraSpaceAfter: 10, breakLine: true } + }) + } else if (hasUrl) { + texts.push({ + text: JSON.parse(JSON.stringify(ref.url)), + options: { hyperlink: { url: ref.url }, color: '0D2F4F', fontFace: 'Arial', fontSize: 12, bullet: { type: 'number' }, paraSpaceAfter: 10, breakLine: true } + }) + } + + // Add to slide + slide.addText( + texts, + { x: 0.5, y: 1.2, w: 9, h: 4, valign: 'top' } + ) + }) +} \ No newline at end of file diff --git a/src/assets/tools.js b/src/assets/tools.js new file mode 100644 index 00000000..b75dd146 --- /dev/null +++ b/src/assets/tools.js @@ -0,0 +1,348 @@ +/** + * Helper functions for case study builder and display functionality. + * @module tools + */ + +import path from 'path' +import { dump } from 'js-yaml' +import { validate } from 'jsonschema' +import jsyaml from 'js-yaml' + +import schema from '../../public/atlas-data/dist/schemas/atlas_website_case_study_schema.json' +import { EXTRA_ADDED_WEBSITE_KEYS } from '../stores/main' + +/** + * Capitalizes the first letter of the provided string. + * @example + * capitalize('hello world!') // Hello world! + * @param {string} str + * @returns {string} + */ +export function capitalize (str) { + return `${str[0].toUpperCase()}${str.slice(1)}` +} + +/** + * Splits text into array, capitalizes each word, joins into one string + * @param {string} str + * @param {string} splitter + * @returns {string} + */ +export function capitalizeSidebar (str, splitter) { + const tokens = str.split(splitter) + for (let i = 0; i < tokens.length; i++) { + tokens[i] = capitalize(tokens[i]) + } + return tokens.join(' ') +} + +/** + * Finds last word in a string + * @param {string} str + * @returns {string} + */ +export function lastWord (str) { + const textArr = str.split(' ') + return textArr[textArr.length - 1] +} + +/** + * Generates a 12-digit UUID-like string for case study file metadata use, + * to uniquely identify each downloaded file. + * @example + * generateID() // 'fcac-f4ba-d65b' + * @param {string} [template='xxxx-xxxx-xxxx] + * @returns {string} + */ +export function generateID (template = 'xxxx-xxxx-xxxx') { + // *NOT* RFC compliant, use this where the uniqueness isn't so important + // adapted from stackoverflow + return template.replace(/x/g, function (c) { + const r = (Math.random() * 16) | 0 + const v = c === 'x' ? r : (r & 0x3) | 0x8 + return v.toString(16) + }) +} + +/** + * Internal holder for deprecation error messages. + */ +const depArray = [] +/** + * Adds an error message if case study contains deprecated fields as labeled in the schema. + * @see {@link https://github.com/tdegrunt/jsonschema#pre-property-validation-hook} + */ +function preValidateProperty (object, key, schema, options, ctx) { + if (schema.deprecated && key in object) { + depArray.push('Deprecation Error: ' + schema.depMessage) + } +} + +/** + * Converts `jsonschema` validation result errors to strings for display. + * Used by {@link validFormatYAML} + * @see {@link https://github.com/tdegrunt/jsonschema#results} for ValidatorResult and ValidationError docs + * @param {ValidationError[]} errors - Array of `jsonschema` library ValidationError objects from the ValidationResult + * @returns {string[]} + */ +function getErrorList (errors) { + const errorArrayLength = errors.length + // let errorMessages = 'File Errors: ' + const errorListSimplified = [] + // Iterates through error list to populate a new list that only contains user friendly (more readable) error messages + for (let i = 0; i < errorArrayLength; i++) { + if (!(errors[i].stack).includes('subschema') && !(errors[i].stack).includes('constant: null')) { + errorListSimplified.push('File Error: ' + errors[i].stack) + } + } + return errorListSimplified +} + +/** + * Verifies if user uploaded case study yaml file is in correct format for use in case builder + * @param {object} yamlObj - Object read from uploaded case study YAML file + * @returns {(string[]|string)}} Array of error strings for display or empty string @todo Check on this + */ +export function validFormatYAML (yamlObj) { + depArray.length = 0 + const validObj = validate(yamlObj, schema, { nestedErrors: true, preValidateProperty }) + // If yaml file format is valid + if (validObj.valid) { + if (depArray.length !== 0) { + return depArray + } + return '' + } + // Else output error messages for user to correct formatting + return depArray.length !== 0 ? getErrorList(validObj.errors).concat(depArray) : getErrorList(validObj.errors) +} + +/** + * Verifies if user uploaded case study yaml file is up to date schema version + * @param {object} yamlObj - Object read from uploaded case study YAML file + * @returns {boolean} + */ +export function isSchemaOutdated (yamlObj) { + return yamlObj.meta.version !== schema.$version +} + +/** + * Returns a formatted date string from a case study object's incident date and granularity fields. + * For use in date rendering on the website and PowerPoints. + * @example + * // Truncated case study object + * const obj = { + * 'incident-date': Date('2022-01-02') + * } + * + * obj['incident-date-granularity'] = 'YEAR' + * formatCaseStudyIncidentDate(obj) // '2022' + * + * obj['incident-date-granularity'] = 'MONTH' + * formatCaseStudyIncidentDate(obj) // 'January 2022' + * + * obj['incident-date-granularity'] = 'DATE' + * formatCaseStudyIncidentDate(obj) // 'January 2, 2022' + * @param {object} caseStudy - Object as created by the case study builder + * @returns {string} Long-form representation of the incident date + */ +export function formatCaseStudyIncidentDate (caseStudy) { + // Returns a string date in locale format + + const date = caseStudy['incident-date'] + const dateGranularity = caseStudy['incident-date-granularity'] + + let dateOptions = null + + if (dateGranularity === 'YEAR') { + dateOptions = { timeZone: 'UTC', year: 'numeric' } + } else if (dateGranularity === 'MONTH') { + dateOptions = { timeZone: 'UTC', year: 'numeric', month: 'long' } + } else if (dateGranularity === undefined || dateGranularity === 'DATE') { + // If dateGranularity is DATE, or there is no date granularity + dateOptions = { + timeZone: 'UTC', + year: 'numeric', + month: 'long', + day: 'numeric' + } + } + + return date.toLocaleDateString('default', dateOptions) +} + +/** + * Allows the browser to download the provided text to the provided filename. + * @param {string} filename - Filename including extension + * @param {object} text - Object representing file contents + */ +export function download (filename, text) { + const element = document.createElement('a') + element.setAttribute( + 'href', + 'data:text/plaincharset=utf-8,' + encodeURIComponent(text) + ) + element.setAttribute('download', filename) + + element.style.display = 'none' + document.body.appendChild(element) + element.click() + document.body.removeChild(element) +} + +/** + * Trims any whitespace around string values. Helper function for downloadStudyFile function. + * @param {string} key + * @param {string} value + * @returns {string} Trimmed value + */ +const trimStrings = function (key, value) { + if (typeof value === 'string') { + return value.trim() + } + return value +} + +/** + * Formats and downloads the provided case study object as a YAML file. + * @param {object} study - Case study data object from case study builder + * @param {string} filename - Filename without extension + */ +export function downloadStudyFile (study, filename) { + const studyCopy = JSON.parse(JSON.stringify(study)) + EXTRA_ADDED_WEBSITE_KEYS.forEach(key => delete studyCopy.study[key]) + const studyYAML = dump(studyCopy, { replacer: trimStrings }).replace( + 'T00:00:00.000Z', + '' + ) + download(`${filename}.yaml`, studyYAML) +} + +/** + * Allows the browser to download a remote file specified by URL. + * For use serving files on GitHub. + * @param {string} url + */ +export function downloadUrlAsFile (url) { + // Downloads a file located at url + // Parameter url is a string + const xhr = new XMLHttpRequest() + xhr.responseType = 'blob' + xhr.onload = function () { + let a = document.createElement('a') + a.href = window.URL.createObjectURL(xhr.response) // xhr.response is a blob + const urlSegments = url.split('/'); + const basename = urlSegments[urlSegments.length - 1]; + a.download = basename; + a.style.display = 'none' + document.body.appendChild(a) + a.click() + a = null + } + xhr.open('GET', url) + xhr.send() +} + +/** + * Allows the browser to open the provided URL in a new tab. + * @param {string} url + */ +export function openNewTab (url) { + window.open(url, '_blank') +} + +/** + * Creates and sets metadata for case studies built by the website. + * @param {object} studyData - Case study object from the builder + * @param {string} studySchemaVersion - Numeric string for the case study file version from nuxt.config.js + */ +export function setMetaData (studyData, studySchemaVersion) { + // Initialize meta key if not exists + studyData.meta = studyData.meta || {} + const nowDate = new Date() + // Only set the date-created once upon study creation + studyData.meta['date-created'] = studyData.meta['date-created'] ? new Date(studyData.meta['date-created']) : nowDate + // Always update date-updated + studyData.meta['date-updated'] = nowDate + // Set UUID + studyData.meta.uuid = studyData.meta.uuid ?? generateID() + // Set case study file version + studyData.meta.version = studySchemaVersion + // Reset the reporter if is exercise + // TODO is this needed? + if (studyData.study['case-study-type'] === 'exercise') { + studyData.study.reporter = '' + } + return studyData.meta +} + +/** + * Constructs the link to a specified Navigator layer file. + * + * @param {string} filename JSON filename, without the extension + * @param {string} directory (optional) + */ +export function constructNavigatorLayerGitHubUrl(filename, directory='dist/case-study-navigator-layers') { + // Env var containing the first part of a raw GitHub link pointing to Navigator layers on the main branch + const navigatorLayerGitHubUrl = import.meta.env.VITE_NAVIGATOR_LAYER_GITHUB_URL + // Construct the full URL to the layer file + return `${navigatorLayerGitHubUrl}/${directory}/${filename}.json` +} + +/** + * Constructs the link to open the specified Navigator layer file + * in the ATLAS Navigator. + * @param {string} layerGitHubUrl + */ +export function constructNavigatorUrlToLayer(layerGitHubUrl) { + const navigatorUrl = import.meta.env.VITE_NAVIGATOR_URL + // Construct the full URL to open the layer file on the Navigator + return `${navigatorUrl}/#layerURL=${layerGitHubUrl}` +} + +/** + * Prepends the .env-provided base URL to the provided path. + * For use by `fetch()` + * @param {string} pathString + */ +export function getPathWithBase (pathString) { + // BASE_URL defaults to `/`, uses path.join to construct valid paths + return path.join(import.meta.env.BASE_URL, pathString) +} + +/** + * Get the string with the numeric month and year of the latest update. + * + * Ex. .../update-files/2024-01.md > 2024-01 + */ +export function getLatestUpdateDate() { + const modules = import.meta.glob('@/../public/content/update-files/*.md') + const updateFilepaths = Object.keys(modules) + // Filepaths are named with numeric YEAR-MONTH.md, so the last one is the most recent + const latestFilepath = updateFilepaths.pop(-1) + + // Return the YEAR-MONTH portion of the filepath + const startIndex = latestFilepath.lastIndexOf('/') + 1 + const endIndex = latestFilepath.lastIndexOf('.md') + const date = latestFilepath.substring(startIndex, endIndex) + + return date +} + +/** + * Get tooltip descriptions for IDView tags and Table filters + */ +export async function getDescriptions() { + try { + const categoriesResponse = await fetch(getPathWithBase('/content/descriptions/categories.yaml')) + const categories = await categoriesResponse.text() + let output = jsyaml.load(categories).categories + + const lifecycleResponse = await fetch(getPathWithBase('/content/descriptions/ML-lifecycle.yaml')) + const lifecycles = await lifecycleResponse.text() + output = output.concat(jsyaml.load(lifecycles)['ML-lifecycle']) + return output + } catch (error) { + console.error('Error fetching YAML file:', error) + } +} \ No newline at end of file diff --git a/src/components/AttackIconToolTip.vue b/src/components/AttackIconToolTip.vue new file mode 100644 index 00000000..f06b6baf --- /dev/null +++ b/src/components/AttackIconToolTip.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/components/BreadCrumbs.vue b/src/components/BreadCrumbs.vue new file mode 100644 index 00000000..69369d1e --- /dev/null +++ b/src/components/BreadCrumbs.vue @@ -0,0 +1,102 @@ + + + \ No newline at end of file diff --git a/src/components/ContactCard.vue b/src/components/ContactCard.vue new file mode 100644 index 00000000..c270b5db --- /dev/null +++ b/src/components/ContactCard.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/DownloadDataDropdown.vue b/src/components/DownloadDataDropdown.vue new file mode 100644 index 00000000..2a7b7e2a --- /dev/null +++ b/src/components/DownloadDataDropdown.vue @@ -0,0 +1,71 @@ + + + \ No newline at end of file diff --git a/src/components/Header.vue b/src/components/Header.vue new file mode 100644 index 00000000..c22b6391 --- /dev/null +++ b/src/components/Header.vue @@ -0,0 +1,226 @@ + + diff --git a/src/components/NavigatorLayerDropdown.vue b/src/components/NavigatorLayerDropdown.vue new file mode 100644 index 00000000..2ca9e2be --- /dev/null +++ b/src/components/NavigatorLayerDropdown.vue @@ -0,0 +1,61 @@ + + + \ No newline at end of file diff --git a/src/components/PageSectionTitle.vue b/src/components/PageSectionTitle.vue new file mode 100644 index 00000000..336fd9e1 --- /dev/null +++ b/src/components/PageSectionTitle.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/components/PastEvents.vue b/src/components/PastEvents.vue new file mode 100644 index 00000000..1a0ba7e4 --- /dev/null +++ b/src/components/PastEvents.vue @@ -0,0 +1,71 @@ + + diff --git a/src/components/ProcedureTimeline.vue b/src/components/ProcedureTimeline.vue new file mode 100644 index 00000000..f2f42c1f --- /dev/null +++ b/src/components/ProcedureTimeline.vue @@ -0,0 +1,57 @@ + + + \ No newline at end of file diff --git a/src/components/ScrollToTopButton.vue b/src/components/ScrollToTopButton.vue new file mode 100644 index 00000000..c0e9edc1 --- /dev/null +++ b/src/components/ScrollToTopButton.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/src/components/SideNav.vue b/src/components/SideNav.vue new file mode 100644 index 00000000..6f582c9f --- /dev/null +++ b/src/components/SideNav.vue @@ -0,0 +1,186 @@ + + + + + \ No newline at end of file diff --git a/src/components/UpcomingEvents.vue b/src/components/UpcomingEvents.vue new file mode 100644 index 00000000..018ad548 --- /dev/null +++ b/src/components/UpcomingEvents.vue @@ -0,0 +1,95 @@ + + + diff --git a/src/components/UpdateContent.vue b/src/components/UpdateContent.vue new file mode 100644 index 00000000..ec8dc69c --- /dev/null +++ b/src/components/UpdateContent.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/components/UpdatesTable.vue b/src/components/UpdatesTable.vue new file mode 100644 index 00000000..c8673328 --- /dev/null +++ b/src/components/UpdatesTable.vue @@ -0,0 +1,66 @@ + + diff --git a/src/components/case-study-form/AddProcedure.vue b/src/components/case-study-form/AddProcedure.vue new file mode 100644 index 00000000..de08c28b --- /dev/null +++ b/src/components/case-study-form/AddProcedure.vue @@ -0,0 +1,178 @@ + + + \ No newline at end of file diff --git a/src/components/case-study-form/AddSource.vue b/src/components/case-study-form/AddSource.vue new file mode 100644 index 00000000..4beaf6ef --- /dev/null +++ b/src/components/case-study-form/AddSource.vue @@ -0,0 +1,124 @@ + + + \ No newline at end of file diff --git a/src/components/case-study-form/EditableProcedureTimeline.vue b/src/components/case-study-form/EditableProcedureTimeline.vue new file mode 100644 index 00000000..f96dcabc --- /dev/null +++ b/src/components/case-study-form/EditableProcedureTimeline.vue @@ -0,0 +1,139 @@ + + + + + \ No newline at end of file diff --git a/src/components/case-study-form/InstructionsDialog.vue b/src/components/case-study-form/InstructionsDialog.vue new file mode 100644 index 00000000..6aabcd48 --- /dev/null +++ b/src/components/case-study-form/InstructionsDialog.vue @@ -0,0 +1,90 @@ + + + \ No newline at end of file diff --git a/src/components/case-study-form/SourceList.vue b/src/components/case-study-form/SourceList.vue new file mode 100644 index 00000000..6e2dcee6 --- /dev/null +++ b/src/components/case-study-form/SourceList.vue @@ -0,0 +1,78 @@ + + + \ No newline at end of file diff --git a/src/components/case-study-form/UploadFileDialog.vue b/src/components/case-study-form/UploadFileDialog.vue new file mode 100644 index 00000000..de2c0240 --- /dev/null +++ b/src/components/case-study-form/UploadFileDialog.vue @@ -0,0 +1,156 @@ + + + \ No newline at end of file diff --git a/src/components/data-display/DataSection.vue b/src/components/data-display/DataSection.vue new file mode 100644 index 00000000..d3db100f --- /dev/null +++ b/src/components/data-display/DataSection.vue @@ -0,0 +1,72 @@ + + + + \ No newline at end of file diff --git a/src/components/data-display/DataSidebar.vue b/src/components/data-display/DataSidebar.vue new file mode 100644 index 00000000..e6deb308 --- /dev/null +++ b/src/components/data-display/DataSidebar.vue @@ -0,0 +1,28 @@ + + + + + \ No newline at end of file diff --git a/src/components/data-display/DataSidebarEntry.vue b/src/components/data-display/DataSidebarEntry.vue new file mode 100644 index 00000000..ebed34ac --- /dev/null +++ b/src/components/data-display/DataSidebarEntry.vue @@ -0,0 +1,173 @@ + + + diff --git a/src/components/data-display/InfoTable.vue b/src/components/data-display/InfoTable.vue new file mode 100644 index 00000000..3dee67f4 --- /dev/null +++ b/src/components/data-display/InfoTable.vue @@ -0,0 +1,208 @@ + + + diff --git a/src/components/data-display/RelatedObjsList.vue b/src/components/data-display/RelatedObjsList.vue new file mode 100644 index 00000000..af540550 --- /dev/null +++ b/src/components/data-display/RelatedObjsList.vue @@ -0,0 +1,59 @@ + + + diff --git a/src/components/data-display/TableFilter.vue b/src/components/data-display/TableFilter.vue new file mode 100644 index 00000000..0fed60bb --- /dev/null +++ b/src/components/data-display/TableFilter.vue @@ -0,0 +1,62 @@ + + + \ No newline at end of file diff --git a/src/components/data-display/Tag.vue b/src/components/data-display/Tag.vue new file mode 100644 index 00000000..34d9f48a --- /dev/null +++ b/src/components/data-display/Tag.vue @@ -0,0 +1,57 @@ + + + + \ No newline at end of file diff --git a/src/components/footer/Copyright.vue b/src/components/footer/Copyright.vue new file mode 100644 index 00000000..66db6e79 --- /dev/null +++ b/src/components/footer/Copyright.vue @@ -0,0 +1,44 @@ + + + + + \ No newline at end of file diff --git a/src/components/footer/Footer.vue b/src/components/footer/Footer.vue new file mode 100644 index 00000000..9debe431 --- /dev/null +++ b/src/components/footer/Footer.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/components/footer/Mission.vue b/src/components/footer/Mission.vue new file mode 100644 index 00000000..0c83a500 --- /dev/null +++ b/src/components/footer/Mission.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/components/home/About.vue b/src/components/home/About.vue new file mode 100644 index 00000000..325a9872 --- /dev/null +++ b/src/components/home/About.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/components/home/Hero.vue b/src/components/home/Hero.vue new file mode 100644 index 00000000..70322387 --- /dev/null +++ b/src/components/home/Hero.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/components/home/MatrixSection.vue b/src/components/home/MatrixSection.vue new file mode 100644 index 00000000..d917c520 --- /dev/null +++ b/src/components/home/MatrixSection.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/src/components/home/MatrixStat.vue b/src/components/home/MatrixStat.vue new file mode 100644 index 00000000..1103e47d --- /dev/null +++ b/src/components/home/MatrixStat.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/home/NewsCard.vue b/src/components/home/NewsCard.vue new file mode 100644 index 00000000..33da172d --- /dev/null +++ b/src/components/home/NewsCard.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/components/home/NewsSection.vue b/src/components/home/NewsSection.vue new file mode 100644 index 00000000..6d6461b8 --- /dev/null +++ b/src/components/home/NewsSection.vue @@ -0,0 +1,53 @@ + + + diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue new file mode 100644 index 00000000..2dc8b055 --- /dev/null +++ b/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconDocumentation.vue b/src/components/icons/IconDocumentation.vue new file mode 100644 index 00000000..6d4791cf --- /dev/null +++ b/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconEcosystem.vue b/src/components/icons/IconEcosystem.vue new file mode 100644 index 00000000..c3a4f078 --- /dev/null +++ b/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconSupport.vue b/src/components/icons/IconSupport.vue new file mode 100644 index 00000000..7452834d --- /dev/null +++ b/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue new file mode 100644 index 00000000..660598d7 --- /dev/null +++ b/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/src/components/matrix/AtlasMatrix.vue b/src/components/matrix/AtlasMatrix.vue new file mode 100644 index 00000000..54407152 --- /dev/null +++ b/src/components/matrix/AtlasMatrix.vue @@ -0,0 +1,33 @@ + + + diff --git a/src/components/matrix/AttackTechniqueCell.vue b/src/components/matrix/AttackTechniqueCell.vue new file mode 100644 index 00000000..47c77561 --- /dev/null +++ b/src/components/matrix/AttackTechniqueCell.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/components/matrix/AttackTechniqueRow.vue b/src/components/matrix/AttackTechniqueRow.vue new file mode 100644 index 00000000..a7e16aac --- /dev/null +++ b/src/components/matrix/AttackTechniqueRow.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/components/matrix/MatrixAttackStyle.vue b/src/components/matrix/MatrixAttackStyle.vue new file mode 100644 index 00000000..22d4b5e9 --- /dev/null +++ b/src/components/matrix/MatrixAttackStyle.vue @@ -0,0 +1,65 @@ + + + + + + diff --git a/src/layouts/default.vue b/src/layouts/default.vue new file mode 100644 index 00000000..76286c00 --- /dev/null +++ b/src/layouts/default.vue @@ -0,0 +1,53 @@ + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 00000000..38132821 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,29 @@ +import { createPinia } from 'pinia' +import { createApp } from 'vue' +import App from './App.vue' +import router from './router' +import vuetify from './plugins/vuetify' +import markdownit from './plugins/markdownit' +import { useMain } from "@/stores/main"; +import { createHead } from '@unhead/vue' +import { insertOsano } from './plugins/osano' +import { insertAnalytics } from './plugins/analytics' + +const pinia = createPinia(); +const app = createApp(App); +const head = createHead() + +app.use(router); +app.use(vuetify); +app.use(markdownit); +app.use(pinia); +app.use(head) + +insertAnalytics(app) +insertOsano() + +// Initialize store +const main = useMain(); +await main.init(); + +app.mount('#app'); diff --git a/src/plugins/analytics.ts b/src/plugins/analytics.ts new file mode 100644 index 00000000..af52f76d --- /dev/null +++ b/src/plugins/analytics.ts @@ -0,0 +1,12 @@ +import type { App } from "vue" +import VueGtag from "vue-gtag" + +export async function insertAnalytics (app: App) { + + if(import.meta.env.VITE_ANALYTICS_ID) { + app.use(VueGtag, { + config: { id: import.meta.env.VITE_ANALYTICS_ID } + }) + } + +} \ No newline at end of file diff --git a/src/plugins/markdownit.ts b/src/plugins/markdownit.ts new file mode 100644 index 00000000..cf54eab8 --- /dev/null +++ b/src/plugins/markdownit.ts @@ -0,0 +1,74 @@ +import MarkdownIt from 'markdown-it' +import MarkdownItAnchor from 'markdown-it-anchor'; +import { frontmatterPlugin } from '@mdit-vue/plugin-frontmatter' +import { tocPlugin } from '@mdit-vue/plugin-toc'; +import type { App } from 'vue' + +// Initialize Markdown-it with settings and plugins +const markdownit = new MarkdownIt({ + html: true, + linkify: true + }) + .use(MarkdownItAnchor) + .use(frontmatterPlugin) + .use(tocPlugin, { level: [4,5] }) + +// Adding new rendering rules to apply Vuetify styling +// https://github.com/markdown-it/markdown-it/blob/master/docs/examples/renderer_rules.md#adding-new-rules + +// Create proxy for rules modification +const proxy = (tokens: any[], idx: number, options: object, env: object, self: any) => self.renderToken(tokens, idx, options); + +// Apply Vuetify text styling to list items +const defaultBulletListOpenRenderer = markdownit.renderer.rules.bullet_list_open || proxy; +markdownit.renderer.rules.bullet_list_open = function(tokens, idx, options, env, self) { + // Apply Vuetify styling + tokens[idx].attrJoin("class", 'mb-4') + return defaultBulletListOpenRenderer(tokens, idx, options, env, self) +} + +const defaultOrderedListOpenRenderer = markdownit.renderer.rules.ordered_list_open || proxy; +markdownit.renderer.rules.ordered_list_open = function(tokens, idx, options, env, self) { + // Apply the Vuetify styling + tokens[idx].attrJoin("class", 'mb-4') + return defaultOrderedListOpenRenderer(tokens, idx, options, env, self) +} + +// Apply Vuetify text classes to heading elements +// https://github.com/markdown-it/markdown-it/blob/master/docs/examples/renderer_rules.md#reusing-existing-rules +const defaultHeadingOpenRenderer = markdownit.renderer.rules.heading_open || proxy; + +markdownit.renderer.rules.heading_open = function(tokens, idx, options, env, self) { + // Apply the appropriate Vuetify typography class, for ex. `text-h2` + // https://vuetifyjs.com/en/styles/text-and-typography/#typography + tokens[idx].attrJoin("class", `text-${tokens[idx].tag}`) + // Add whitespace + if (tokens[idx].tag === 'h4') { + // Section titles in AI security 101 document + tokens[idx].attrJoin("class", 'mt-10') + } + tokens[idx].attrJoin("class", 'mb-3') + return defaultHeadingOpenRenderer(tokens, idx, options, env, self) +}; + +// Wrap any HTML tables with Vuetify table classes +// https://github.com/markdown-it/markdown-it/blob/master/docs/examples/renderer_rules.md#to-add-a-wrapper-element + +const defaultTableOpenRenderer = markdownit.renderer.rules.table_open || proxy; +markdownit.renderer.rules.table_open = (tokens, idx, options, env, self) => { + return `
${defaultTableOpenRenderer(tokens, idx, options, env, self)}`; +}; + +const defaultTableCloseRenderer = markdownit.renderer.rules.table_close || proxy; +markdownit.renderer.rules.table_close = (tokens, idx, options, env, self) => { + return `${defaultTableCloseRenderer(tokens, idx, options, env, self)}
`; +}; + +export default { + install: (app: App) => { + // Usage in setup: + // import { inject } from 'vue' + // const md = inject('markdownit') + app.provide('markdownit', markdownit) + } +} \ No newline at end of file diff --git a/src/plugins/osano.ts b/src/plugins/osano.ts new file mode 100644 index 00000000..570b046a --- /dev/null +++ b/src/plugins/osano.ts @@ -0,0 +1,14 @@ +export async function insertOsano () { + + // Check for existence of the Osano cookie env var + if ( import.meta.env.VITE_OSANO_SCRIPT ) { + + // Create a script element with the script URL + const script = document.createElement('script') + script.src = import.meta.env.VITE_OSANO_SCRIPT + + // Append the script element to the document's head + document.head.appendChild(script) + + } +} \ No newline at end of file diff --git a/src/plugins/vuetify.ts b/src/plugins/vuetify.ts new file mode 100644 index 00000000..2f224756 --- /dev/null +++ b/src/plugins/vuetify.ts @@ -0,0 +1,44 @@ +// Styles +import '@mdi/font/css/materialdesignicons.css' +import 'vuetify/styles' + +// Vuetify +import { createVuetify } from 'vuetify' + +// Default colors + mitre brand colors +const mainTheme = { + dark: false, + colors: { + header: '#424242', + background: '#ffffff', + surface: '#ffffff', + primary: '#424242', + secondary: '#4957b2', + error: '#b00020', + info: '#2196f3', + success: '#4caf50', + warning: '#fb8c00', + bruhus: '#fb8c00', + blue: '#005B94', + highlighter: '#FFF601', + darkNavy: '#0B2338', + navy: '#0D2F4F', + lightBlue: '#87DEFF', + darkGray: '#7E8284', + silver: '#D4D4D3', + lightSilver: '#F1F3F4', + } +} + +// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides +export default createVuetify({ + theme: { + defaultTheme: 'mainTheme', + themes: { + mainTheme, + } + }, + display: { + mobileBreakpoint: 'sm', + } +}) diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 00000000..dfe3267d --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,99 @@ +import { createRouter, createWebHistory } from 'vue-router' + +import { getLatestUpdateDate } from '@/assets/tools.js' + +const routes = [ + { + path: '/', + component: () => import('@/views/Home.vue'), + }, + { + path: '/terms', + component: () => import('../views/TermsView.vue'), + }, + { + path: '/resources/faq', + component: () => import('../views/resources/FAQView.vue'), + }, + { + path: '/resources/ai-security-101', + component: () => import('../views/resources/AiSecurity101View.vue'), + }, + // Redirects the old 101 URL to the new one + { + path: '/resources/adversarial-ml-101', + redirect: '/resources/ai-security-101', + }, + { + path: '/resources/info', + component: () => import('../views/resources/GeneralInformationView.vue'), + }, + { + path: '/resources/contact', + component: () => import('../views/resources/ContactView.vue'), + }, + { + path: '/resources/events', + component: () => import('../views/resources/EventsView.vue'), + }, + { + path: '/resources/contribute', + component: () => import('../views/resources/ContributorsListView.vue'), + }, + { + // When a user visits the updates index page, redirect to the most recent update + path: '/resources/updates', + redirect: `/resources/updates/${getLatestUpdateDate()}` + }, + { + path: '/resources/updates/:date', + component: () => import('../views/resources/UpdatesListView.vue') + }, + { + path: '/:objectTypePlural', + component: () => import('../views/ObjectListView.vue'), + }, + { + path: '/:objectTypePlural/:id', + component: () => import('../views/IDView.vue'), + }, + { + path: '/studies/:id', + component: () => import('../views/StudiesIDView.vue'), + }, + { + path: '/studies/create', + component: () => import('../views/BuildCaseStudyView.vue'), + }, + { + path: '/navigator', + component: () => import('../views/NavigatorView.vue'), + }, + { + path: '/matrices/:id', + component: () => import('@/views/MatrixView.vue'), + }, + { + path: '/:catchAll(.*)*', + name: 'ErrorNotFound', + component: () => import('../views/ErrorNotFoundView.vue'), + }, +] + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes, + scrollBehavior(to, from, savedPosition) { + if (to.hash) { + return { + el: to.hash, + // Accomodate for the header height in px + top: 64 + } + } + // always scroll to top + return { top: 0 } + }, +}) + +export default router diff --git a/src/stores/main.js b/src/stores/main.js new file mode 100644 index 00000000..9918193e --- /dev/null +++ b/src/stores/main.js @@ -0,0 +1,735 @@ +import { defineStore } from 'pinia' + +import yaml from 'js-yaml' + +import { + dataObjectToPluralTitle, + dataObjectToRoute +} from '@/assets/dataHelpers.js' +import { getPathWithBase } from '@/assets/tools' + +/** + * Keys that will not be considered as properties or references to other data objects + * @type {string[]} + */ +const DEFAULT_DATA_OBJECT_KEYS = ['id', 'object-type', 'name', 'description'] + +/** + * Keys added as part of the nuxtServerInit ingest for website use. + * To be stripped from objects before export. + * @type {string[]} + */ +export const EXTRA_ADDED_WEBSITE_KEYS = ['route', 'label', 'columnNames'] + +/** + * Creates a deep copy of the provided data object, limited to defined keys. + * Used to provide a reference object for linking + * + * @param {Object} obj + * @param {string[]} extraKeys + * @returns {Object} Copied data object + * @private + */ +const deepCopyDefault = (obj, extraKeys) => { + let keysToKeep = DEFAULT_DATA_OBJECT_KEYS + EXTRA_ADDED_WEBSITE_KEYS + if (typeof extraKeys !== 'undefined') { + // Add specified keys if present + keysToKeep = keysToKeep + extraKeys + } + return JSON.parse(JSON.stringify(obj, keysToKeep)) +} + + + +export const useMain = defineStore('main', { + state: () => ( + { + /** + * ATLAS Data as read from ATLAS.yaml + * @type {Object} + * @alias state: data + */ + data: {}, + /** + * Whether to show the navigation drawer on pages + * @type {boolean} + * @alias state: doShowNavDrawer + */ + doShowNavDrawer: true, + /** + * Items that populate the navigation drawer + * @type {object|object[]} items - An object { title: string, data: data objects } specifying the navigation drawer title, or an array of data objects whose title is inferred from the type + * @alias state: navDrawerItems + */ + navDrawerItems: [], + /** + * Title for the navigation drawer + * @type {String} + * @alias state: navDrawerTitle + */ + navDrawerTitle: 'Placeholder Title', + /** + * Whether to show the annoucement banner on pages + */ + doShowAnnoucementBanner: true, + /** + * Accepted values for the _objectTypePlural route + */ + objectTypePluralValues: [], + /** + * Whether the 404 page is currently displayed + */ + pageNotFoundDisplaying: false, + } + ), +// other options... + getters: { + /** + * Retrieves the ATLAS Data value for the specified key + * @alias mapGetters: getDataAttribute + */ + getDataAttribute: state => key => state.data[key], + + /** + * Get a single array of all objects + * @returns {object[]} + */ + getDataObjects: state => state.data.allDataObjects, + + /** + * Get array containing the names of all the object types + * @returns {string[]} + */ + getDataObjectTypes: state => Object.keys(state.data.objects), + + /** + * Returns data objects under the provided object type, either as an object of { matrixId: [objs] } + * for ex. tactic or technique index page use in filtering, or an array of data objects for ex. + * case study index page use. + * + * @param {String} objType - Value of the data object's `object-type` field + * @param {string} [matrixId] - Key for the matrix under the `matrices` ATLAS Data object + * @param {boolean} [returnObject] - Whether to return an object instead of an array + * @returns {object|object[]} Data objects matching the type + * @alias mapGetters: getDataObjectsByType + */ + getDataObjectsByType: state => (objType, matrixId, returnObject) => { + // Returns a list of data objects under the provided object type + // or an empty Array if not found + // Ex. in rendering the studies page when there is no case-studies key in the data + const content = state.data.objects[objType] + + if (typeof returnObject !== 'undefined' && returnObject) { + // Return the object with keys of matrix ID and values of data objects + return content + } + + if (typeof matrixId === 'undefined') { + // This is a top-level key containing an array of data objects + if (Array.isArray(content)) { + return content + } + // Otherwise this is an object keyed by matrix ID, + // and the ID is is not specified + // Return the all matrices' objects of this type + return Object.values(content).flat() + } + // Otherwise access the matrix's objects by ID + return content[matrixId] ?? [] + }, + + /** + * Retrieves an array of data objects of a specific type, optionally that belong to a specific matrix, + * that contain a specified key and value. + * + * @param {string} objType - Value of the data object's `object-type` field + * @param {string} key - Data object key field with which to match + * @param {string} value - Value of the data object key field with which to match + * @param {string} [matrixId] - The key for the matrix under the `matrices` ATLAS Data object + * @returns {object[]} Array of data objects matching the parameters + */ + getDataObjectsByTypeKeyValue: + function(state) { return function (objType, key, value, matrixId) { + // Retrieves a list of data objects + const objs = this.getDataObjectsByType(objType, matrixId) + // Return the first data object whose key-value matches the provided value argument + return objs.filter(obj => obj[key] === value) + } + }, + + /** + * Retrieves an array of deep-copied data objects of a specific type, optionally that belong to a specific matrix, + * that contain a specified key and value. + * Used when the objects are to be further modified without changing the store data + * + * @param {string} objType - Value of the data object's `object-type` field + * @param {string} key - Data object key field with which to match + * @param {string} value - Value of the data object key field with which to match + * @param {string} [matrixId] - The key for the matrix under the `matrices` ATLAS Data object + * @returns {object[]} Array of data objects matching the parameters + */ + getDataObjectsByTypeKeyValueDeepCopyDefault: + function(state) { return function (objType, key, value, matrixId) { + // Retrieves a deep copy of a list of data objects, keeping only default data keys + let objs = this.getDataObjectsByTypeKeyValue( + objType, + key, + value, + matrixId + ) + // Deep copy only the default data keys, i.e. id, name, route for linking + objs = objs.map(obj => deepCopyDefault(obj)) + return objs + } + }, + + /** + * Retrieves an array of data objects of a specific type, optionally that belong to a specific matrix, + * that contain the specified value in the array under the given key. + * + * @param {string} objType - Value of the data object's `object-type` field + * @param {string} key - Data object key field with which to match + * @param {string} value - Value of the data object key field with which to match + * @param {string} [matrixId] - The key for the matrix under the `matrices` ATLAS Data object + * @returns {object[]} Array of data objects matching the parameters + * @alias mapGetters: getDataObjectsByTypeKeyContainingValue + */ + getDataObjectsByTypeKeyContainingValue: + function(state) { return function (objType, key, value, matrixId) { + // Retrieves a list of data objects + const objs = this.getDataObjectsByType(objType, matrixId) + // Return the data objects whose key includes the provided value argument + return objs.filter(obj => key in obj && obj[key].includes(value)) + } + }, + + /** + * Returns an object with key/object-type to array of objects referenced by this object. + * Re-keys specific items including "subtechnique-of" for title display purposes. + * + * @param {object} argObj - Data object + * @returns {object} Object of associated data objects + */ + getReferencedDataObjects: function (state) { + return function (argObj) { + // Returns an object with key/object-type to array of objects referenced by this object + + // Get object keys that may be references, i.e. are not default + const dataKeys = Object.keys(argObj).filter(value => { + // Handle tactics having techniques attached, or techniques having subtechniques attached, + // from the matrix hierarchy building in nuxtServerInit, as the link already exists in the opposite direction + if ( + (argObj['object-type'] === 'tactic' && value === 'techniques') || + (argObj['object-type'] === 'technique' && value === 'subtechniques') || + // A technique's tactics will be found by the referencing side + // Also to avoid rendering array of tactics as tags + (argObj['object-type'] === 'technique' && value === 'tactics') + ) { + return false + } + // Returns true if this key value should be considered a possible ID reference or property + return !(DEFAULT_DATA_OBJECT_KEYS + EXTRA_ADDED_WEBSITE_KEYS).includes( + value + ) + }) + + // IDs of objects directly referenced by this page's object + const referencedObjects = {} + dataKeys.forEach(key => { + const value = argObj[key] + // Note that array of data object IDs are handled by getDataObjectsReferencing + if ( + Array.isArray(value) && + typeof value[0] === 'object' && + 'id' in value[0] + ) { + // List of data objects for tabular format + + // Pull out the list of field names other than 'id' to be column names + let columnNames = Object.keys(value[0]) + columnNames = columnNames.filter(name => name !== 'id') + + // Flatten into an array of data objects augmented with tabular data and column names + const objs = value + .map(v => { + // Get data object by ID + const obj = this.getDataObjectByIdDeepCopyDefault(v['id']) + // Combine it with the tabular data + const augmentedObj = Object.assign(obj, v) + // Add the tabular data key names as column names + augmentedObj['columnNames'] = columnNames + return augmentedObj + }) + .flat() + + // Assign to related objects + referencedObjects[key] = objs + } else { + // Single object referenced by ID + const refObj = this.getDataObjectByIdDeepCopyDefault(value) + if (refObj) { + // Create a single-element Array + referencedObjects[key] = [refObj] + } else if ( + // The value is a non-empty string, i.e. a declared property + (typeof value === 'string' && /[^\s]/.test(value)) || + // The value is a string array, i.e. tags + (Array.isArray(value) && value.every(v => typeof v === 'string')) + ) { + // Add the key and value as-is + referencedObjects[key] = value + } + } + }) + + // Handle subtechnique-of title + if ('subtechnique-of' in referencedObjects) { + // Access parent technique object from the array under the `subtechnique-of` key + const parentTechniqueId = referencedObjects['subtechnique-of'][0]['id'] + // Access full object, including the tactics key + const parentTechnique = this.getDataObjectById(parentTechniqueId) + + // Add the parent technique's tactic(s) to the subtechnique's related objects + referencedObjects['tactics'] = parentTechnique.tactics.map(id => + this.getDataObjectByIdDeepCopyDefault(id) + ) + + // Re-key the parent technique object under the desired display label, + // which expects an array + referencedObjects['parent-technique'] = [parentTechnique] + // Remove the re-labeled key-value pair + delete referencedObjects['subtechnique-of'] + } + return referencedObjects + } + }, + + /** + * Returns an object with key/object-type to array of deep-copied objects that reference this object. + * Re-keys specific items including "subtechniques" for title display purposes. + * Handles case studies separately. + * + * @param {object} argObj - Data object + * @returns {object} Object of associated data objects + */ + getDataObjectsReferencing: function (state) { + return function (argObj) { + // Return an object with key/object-type to array of deep-copied objects that reference this object + + const id = argObj.id + + // Find objects that reference this object's ID + let objects = this.getDataObjects.filter(obj => { + // Disregard the argObj itself + if (obj.id === id) { + return false + } + // Otherwise examine the object's values + // Can be primitives or arrays of objects + const objValues = Object.values(obj).flat() + // Take + const isRef = objValues.some(val => { + if (typeof val === 'string') { + // argObj ID is referenced directly or in a nested array + // ex. tactic ID in a technique's tactics array + return val === id + } else if (typeof val === 'object') { + // argObj ID is referenced in a nested object + // ex. procedure step technique, or a mitigation technique use id + return Object.values(val).includes(id) + } else { + // This is not a reference to an object ID + return false + } + }) + return isRef + }) + // Make a deep copy of each object, with only default keys, i.e. id, name, route for linking + objects = objects.map(obj => deepCopyDefault(obj)) + + // Other subtechniques + if (argObj['object-type'] === 'technique' && 'subtechnique-of' in argObj) { + const parentTechniqueId = id.substring(0, id.lastIndexOf('.')) + const otherSubtechniques = + this.getDataObjectsByTypeKeyValueDeepCopyDefault( + 'techniques', + 'subtechnique-of', + parentTechniqueId + ) + // Add other subtechniques that aren't this one + objects = objects.concat(otherSubtechniques.filter(t => t.id !== id)) + } + + // Add subtechniques of tactics to the technique list + if (argObj['object-type'] === 'tactic') { + let subtechniques = [] + objects.forEach(obj => { + if (obj['object-type'] === 'technique') { + subtechniques = subtechniques.concat( + this.getDataObjectsByTypeKeyValueDeepCopyDefault( + 'techniques', + 'subtechnique-of', + obj.id + ) + ) + } + }) + objects = objects.concat(subtechniques) + } + + // Group by object type + const results = objects.reduce((acc, obj) => { + var objectType = obj['object-type'] + if (!acc[objectType]) { + acc[objectType] = [] + } + acc[objectType].push(obj) + return acc + }, {}) + + // Label subtechniques if available + if ('technique' in results && argObj['object-type'] === 'technique') { + let subtechniqueKey = 'subtechniques' + if ( + argObj['object-type'] === 'technique' && + 'subtechnique-of' in argObj + ) { + subtechniqueKey = 'other subtechniques' + } + // Relabel the techniques found, that aren't a parent technique + const subts = results['technique'].filter(t => 'subtechnique-of' in t) + if (subts.length) { + results[subtechniqueKey] = subts + } + delete results['technique'] + } + + // Adding ATT&CK object to relatedObjects for DataSidebar rendering + if ('ATT&CK-reference' in argObj) { + results['ATT&CK-reference'] = argObj['ATT&CK-reference'] + } + + return results + } + }, + + /** + * Returns an object of key/object-type to array of data objects related to this object + * @returns {Object} Related data objects, keyed by display title or data object type + */ + getRelatedDataObjects: function (state) { + return function (argObj) { + // Returns an object of key/object-type to array of data objects related to this object + const relatedObjs = { + ...this.getReferencedDataObjects(argObj), + ...this.getDataObjectsReferencing(argObj) + } + // Sort object keys in alphabetical order for display + return Object.keys(relatedObjs) + .sort() + .reduce((acc, key) => { + acc[key] = relatedObjs[key] + return acc + }, {}) + } + }, + + /** + * Retrieve a data object by ID + * @param {string} value - Data object ID + * @returns {object} Matching data object + * @alias mapGetters: getDataObjectById + */ + getDataObjectById: function (state) { + return function (value) { // Returns the data object with the corresponding ID + if (this.getDataObjects) + return this.getDataObjects.find(obj => obj['id'] === value) + } + }, + + /** + * Retrieve a data object by ID, deep-copying the object with only default keys present + * @param {string} value - Data object ID + * @returns {object} Matching data object + */ + getDataObjectByIdDeepCopyDefault: function (state) { + return function (value) { // Returns a deep copy of the the data object with the corresponding ID, with only default data keys present + let obj = this.getDataObjectById(value) + // Deep copy, only keeping default keys, i.e. id, name, route, for linking + if (obj) { + obj = deepCopyDefault(obj) + } + return obj + } + }, + + /** + * Retrieves the ID of the first matrix + * @returns {string} matrix ID + * @alias mapGetters: getFirstMatrixId + */ + getFirstMatrixId: state => { + return state.data.matrices[0].id + }, + + /** + * Retrieves an array of matrix IDs + * @returns {string[]} matrix IDs + */ + getMatrixIds: state => { + return state.data.matrices.map(obj => obj.id) + }, + + /** + * Retrieve a matrix object by ID + * @param {string} value - Matrix ID + * @returns {object} Matching matrix object containing keys to data object arrays + * @alias mapGetters: getMatrixByID + */ + getMatrixByID: state => value => { + return state.data.matrices.find(obj => obj['id'] === value) + }, + /** + * Retrieves whether the annoucement banner should be displayed + * @alias mapGetters: getDoShowAnnoucementBanner + */ + getDoShowAnnoucementBanner: state => state.doShowAnnoucementBanner, + /** + * Retrieves the array of accepted _objectTypePlural values + */ + getObjectTypePluralValues: state => state.objectTypePluralValues, + /** + * Retrieve the parent object of this subtechnique, if any. + * + * @param {object} subtechnique - A subtechnique data object + * @returns {object|null} The subtechnique's parent object, or null + * @alias mapGetters: subtechnique/getParent + */ + getParent: function (state) { + return function (subtechnique) { + if ('subtechnique-of' in subtechnique) { + const parentTechniqueId = subtechnique['subtechnique-of'] + return this.getDataObjectById(parentTechniqueId) + } + return null + } + }, + }, + actions: { + + /** + * Sets the data as loaded in from file + * @param {object} payload - ATLAS.yaml data + */ + SET_ATLAS_DATA(payload) { + this.data = { ...this.data, ...payload } + }, + /** + * Sets or toggles the visiblity of the navigation drawer + * @param {boolean} [status] - Whether the navigation drawer should be open. If omitted, toggles the state. + * @alias mapMutations: TOGGLE_NAV_DRAWER + */ + TOGGLE_NAV_DRAWER(status) { + if (typeof status === 'undefined') { + // Toggle state + this.doShowNavDrawer = !this.doShowNavDrawer + } else if (typeof status === 'boolean') { + // Set state + this.doShowNavDrawer = status + } + }, + /** + * Sets the navigation drawer items + * @param {object|object[]} items - An object { title: string, data: data objects } specifying the navigation drawer title, or an array of data objects whose title is inferred from the type + * @alias mapMutations: SET_NAV_DRAWER_ITEMS + */ + SET_NAV_DRAWER_ITEMS(items) { + if (Array.isArray(items) && items.length > 0 && 'object-type' in items[0]) { + // Payload is an array of data objects + this.navDrawerItems = [...items] + // Plural object type with spaces instead of dashes, if any + this.navDrawerTitle = dataObjectToPluralTitle(items[0]) + } else if ( + typeof items === 'object' && + items !== null && + 'data' in items && + 'title' in items + ) { + // Payload is an object { data, title } + this.navDrawerItems = [...items.data] + this.navDrawerTitle = items.title + } else { + console.error('Unexpected payload for SET_NAV_DRAWER_ITEMS', items) + } + }, + /** + * Disables the visiblity of the annoucement banner + * @alias mapMutations: DISMISS_ANNOUCEMENT_BANNER + */ + DISMISS_ANNOUCEMENT_BANNER(state) { + // Set visibility to false + this.doShowAnnoucementBanner = false + }, + /** + * Sets the accepted _objectTypePlural values as parsed from the ATLAS.yaml file + * @param {string[]} payload + */ + SET_OBJECT_TYPE_PLURAL_VALUES(payload) { + this.objectTypePluralValues = [...payload] + }, + // Note that this function is called for every dynamic route generated via nuxt generate + // TODO Caching, also needs return or await + /** + * Loads in ATLAS.yaml data. Automatically called upon server start. + */ + async init() { + + // Retrieve the threat matrix YAML data and populate store upon start + let atlasData = await fetch(getPathWithBase('/atlas-data/dist/ATLAS.yaml')) + let yamlString = await atlasData.text() + + // Get all contents, then parse and commit payload + const promise = Promise.resolve(yamlString).then(contents => { + // Parse YAML + const data = yaml.load(contents) + + // Collect top-level data objects under the key 'objects' + const { id, name, version, matrices, ...objects } = data + const result = { id, name, version, matrices, objects } + + // Hold on to all data objects, in a list-of-lists + // Starting with the top-level objects + let allDataObjects = Object.values(objects).flat() + + // Add the route to each top-level object + allDataObjects.forEach(dataObj => { + // Add a property for each data object's internal route + dataObj.route = dataObjectToRoute(dataObj) + if ( + 'object-type' in dataObj && + dataObj['object-type'] == 'case-study' + ) { + dataObj.columnNames = ['summary'] + } + }) + + // Pluralized last word of object-type values, which serve as route names + const objectTypePluralValues = new Set() + + // Build matrix-like structure under each data object type + matrices.forEach((matrix, i) => { + // Collect data objects within each matrix + const { id, name, ...matrix_objs } = matrix + + let allMatrixObjs = Object.values(matrix_objs).flat() + // Add the route to each matrix object + allMatrixObjs.forEach(dataObj => { + // Add a property for each data object's internal route + dataObj.route = dataObjectToRoute(dataObj) + + // Add label field + if (dataObj['object-type'] === 'technique') { + if ('subtechnique-of' in dataObj) { + const parentName = matrix_objs.techniques.find( + p => p['id'] === dataObj['subtechnique-of'] + ).name + dataObj.label = `${parentName}: ${dataObj.name}` + } else { + dataObj.label = dataObj.name + } + } + }) + + // Create a populated tree of tactics > techniques > subtechniques in the current data + + // Split techniques into top-level parents, and subtechniques; add labels + const parentTechniques = matrix_objs.techniques.filter( + t => 'tactics' in t + ) + const subtechniques = matrix_objs.techniques.filter( + t => 'subtechnique-of' in t + ) + + // Add subtechniques to top-level techniques + const populatedTechniques = parentTechniques.map(t => { + // Check if any subtechniques reference this technique + if (subtechniques.some(s => s['subtechnique-of'] === t.id)) { + // Add associated subtechniques to this technique, deep-copying and limited to default keys for linking + const associatedObjs = subtechniques.filter( + s => s['subtechnique-of'] === t.id + ) + t.subtechniques = associatedObjs.map(obj => deepCopyDefault(obj)) + } + return t + }) + + // Add techniques to tactics + matrix_objs.tactics.map(t => { + // Add techniques that reference this tactic, , deep-copying and limited to default keys for linking, as well as the subtechniques link + const associatedObjs = populatedTechniques.filter(pt => + pt.tactics.includes(t.id) + ) + t.techniques = associatedObjs.map(obj => + deepCopyDefault(obj, ['subtechniques']) + ) + return t + }) + + // Iterate over objects and add them to the result + for (const [key, dataObjs] of Object.entries(matrix_objs)) { + // Add objects from this matrix into the result + if (key in objects) { + // Add to the existing object keyed by the matrix ID + objects[key][id] = dataObjs + } else { + // Otherwise initialize it + objects[key] = { + [id]: dataObjs + } + + // Add to the list of accepted _objectTypeValues + const objectTypePlural = dataObjectToPluralTitle(key, true) + objectTypePluralValues.add(objectTypePlural) + } + + // Collect each matrix's objects for later operations + allDataObjects = allDataObjects.concat(dataObjs) + + // Remove this key and values from the result's matrix, + // to reduce data duplciationg. Leaving ID and name + delete result.matrices[i][key] + result.matrices[i]['route'] = `/matrices/${id}` + } + }) + + // Commit the array of accepted _objectTypePlural values + this.SET_OBJECT_TYPE_PLURAL_VALUES( + Array.from(objectTypePluralValues) + ) + + // Add all data objects to the store to facilitate finding by ID + result.allDataObjects = allDataObjects + + // Commit data to the store, in preparation for using getters below + this.SET_ATLAS_DATA(result) + + // Link each data object to related objects + allDataObjects.forEach(dataObj => { + // Add a property for the data object's internal route + dataObj.route = dataObjectToRoute(dataObj) + + // Apply to all objects but case studies, which have their own template + if (dataObj['object-type'] != 'case-study') { + // Add a property with other data objects referenced by this one or that reference this one + dataObj.relatedObjects = this.getRelatedDataObjects(dataObj) + } + }) + + // Commit the fully populated data + this.SET_ATLAS_DATA(result) + }) + + return promise + } + } +}) diff --git a/src/views/BuildCaseStudyView.vue b/src/views/BuildCaseStudyView.vue new file mode 100644 index 00000000..19c89a39 --- /dev/null +++ b/src/views/BuildCaseStudyView.vue @@ -0,0 +1,444 @@ + + + diff --git a/src/views/ErrorNotFoundView.vue b/src/views/ErrorNotFoundView.vue new file mode 100644 index 00000000..6e7a4e51 --- /dev/null +++ b/src/views/ErrorNotFoundView.vue @@ -0,0 +1,30 @@ + + + diff --git a/src/views/Home.vue b/src/views/Home.vue new file mode 100644 index 00000000..2187674a --- /dev/null +++ b/src/views/Home.vue @@ -0,0 +1,15 @@ + + + diff --git a/src/views/IDView.vue b/src/views/IDView.vue new file mode 100644 index 00000000..4df24a86 --- /dev/null +++ b/src/views/IDView.vue @@ -0,0 +1,96 @@ + + + + diff --git a/src/views/MatrixView.vue b/src/views/MatrixView.vue new file mode 100644 index 00000000..f7cfd814 --- /dev/null +++ b/src/views/MatrixView.vue @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/src/views/NavigatorView.vue b/src/views/NavigatorView.vue new file mode 100644 index 00000000..1191838a --- /dev/null +++ b/src/views/NavigatorView.vue @@ -0,0 +1,61 @@ +